rotationsproblem

  • Antworten:6
Sascha D.
  • Forum-Beiträge: 74

02.03.2012, 10:23:28 via Website

folgendes problem:
wenn ich meine swing variante nehme klappt alles. das auto dreht genauso wie meine crashpunkte am auto. verwendet habe ich folgendes:
für die crashpunkte:
float radWinkel = (float) (winkel / 180.0 * Math.PI);
float ex2 = (float) (sx + laenge * Math.sin(angle - radWinkel));
float ey2 = (float) (sy + laenge * Math.cos(angle - radWinkel));

und für die grafik:
BufferedImage rotateImage(BufferedImage src, double degrees) {
AffineTransform affineTransform = AffineTransform
.getRotateInstance(Math.toRadians(degrees),
src.getWidth() / 2, src.getHeight() / 2);
BufferedImage rotatedImage = new BufferedImage(src.getWidth(),
src.getHeight(), src.getType());
Graphics2D g = (Graphics2D) rotatedImage.getGraphics();
g.setTransform(affineTransform);
g.drawImage(src, 0, 0, null);
return rotatedImage;
}

nehme ich aber jetzt bei android für die crashpunkte auch sin, cos klappt aber mit matrix das auto drehen ala so:
Matrix matrix = new Matrix();
matrix.postRotate(-auto_grad);
Bitmap rotatedBitmap = Bitmap.createBitmap(BI_auto, 0, 0,
BI_auto.getWidth(), BI_auto.getHeight(), matrix, true);
canvas.drawBitmap(rotatedBitmap, autox, autoy, null);

ist das auto versetzt zu den crashpunkten.

ausserdem ist mit aufgefallen in swing muss das auto aufm kopf stehen und in android normal.
warum ist das so ?
gibt es noch eine andere variante das auto oder die crashpunkte zu drehen, damit beides gleich ist ?

Antworten
Sascha D.
  • Forum-Beiträge: 74

02.03.2012, 12:52:40 via Website

hier mal ein bild, wie ich das meine. die punkte drehen mittig und das aus der bahn.
selbst wenn ich rotate(grad, mittex, mittey) nehme, rotiert der offenbar nicht mittig.

aber bei 90,180,270,360 grad ist es mittig

woran liegt das ?

— geändert am 02.03.2012, 12:54:20

Antworten
Mac Systems
  • Forum-Beiträge: 1.727

04.03.2012, 14:06:54 via Website

Eigendlich funtzten alle Grapics APIs so, mitte definieren und dann drehen, manchmals vorher den ursprungspunkt auf dem Stack retten, ala glPushMatrix.

Windmate HD, See you @ IO 14 , Worked on Wundercar, Glass V3, LG G Watch, Moto 360, Android TV

Antworten
Sascha D.
  • Forum-Beiträge: 74

05.03.2012, 08:20:22 via Website

bei dem AffineTransform in swing macht der das offenbar automatisch.

hatte jetzt vorübergehen so gelöst, dass ich gesehen habe, kommt nen größeres bild raus und habe dann einfach zurück gerechnet.
aber ist eben nicht die feinste art.

welcher befehl ist zum mittig setzen in android matrix ?

Antworten
Harry
  • Forum-Beiträge: 52

05.03.2012, 10:37:34 via Website

Hallo,

also in OpenGL ES musst du dein Bild erst in die Mitte transformieren drehen und zurück. Also:

// zum Mittelpunkt verschieben
glTranslate(-xBildVerschiebung, -yBildVerschiebung, -zBildVerschiebung);
// 45° um die X-Achse rotieren
glRotate(45, 1, 0, 0);
// zurück verschieben
glTranslate(xBildVerschiebung, yBildVerschiebung, zBildeVerschiebung);

Bin jetzt nicht ganz sicher, aber wenns so nicht geht, vertausch die beiden verschiebungen.

Gruß Harry

Antworten
Sascha D.
  • Forum-Beiträge: 74

10.03.2012, 09:20:31 via Website

und ich canvas surfaceview ?

Antworten