AffineTransform: Nach Drehen verschieben

_-`avaj´-_

Mitglied
Hallo,
ich habe folgendes Problem: Für ein Spiel benutze ich AffineTransform um Objekte zu rotieren und zu verschieben. Allerdings gibt es da ein Problem wenn man versucht ein rotiertes Objekt in eine bestimmte Richtung zu verschieben:
Da AffineTransform ja das ganze Koordinatensystem dreht sind damit z.B. nach einer 90° Drehung die Koordinatenachen vertaucht.
Ich suche jetzt nach einer Möglichkeit Koordinaten so umzurechnen, das das ganze wieder richtig funktioniert.

Ich hoffe jemand kann mir helfen 😉
 
Du musst unterscheiden zwischen einer relativen und einer absoluten Transformation. Eine Transformation kann relativ zum transformierten Koordinatensystem sein, das ist bei Java's AffineTransform Klasse normalerweise der Fall. Transformationen können aber auch absolut sein, das heisst sie beziehen sich immer auf das absolute Koordinatensystem.

Wenn du z.B. 3 Transformationen hast - A, B und C
Dann ist ABC relativ identisch zu CBA absolut.

Wenn du alle drei hintereinander durchführst, also erst A, gefolgt von B und zum Schluss C und das ganze als relative Transformationen, dann ist das exakt das selbe als wenn du erst C, dann B und dann A ausführst aber als absolute Transformationen.
Wenn du also so was hast
Java:
AffineTransform rotate = AffineTransform.getRotateInstance(...);
AffineTransform move = AffineTransform.getTranslateInstance(...);

Und du willst, dass die Verschiebung nach der Rotation im absoluten/ursprünglichen Koordinatensystem stattfindet, könntest du das hier schreiben.
Java:
AffineTranform transform = move.concatenate(rotate);
oder alternativ
Java:
AffineTranform transform = rotate.preConcatenate(move);
 
Hallo,
danke für deine Antwort!
Das ganze funktioniert mit
Code:
transform.preConcatenate(move)
ganz wunderbar!

Damit hätte sich das Thema dann auch schon wieder 😉

Vielen Dank nochmal für deine Hilfe!

PS:
Code:
concatenate(AffineTransform Tx)
bzw.
Code:
concatenate(AffineTransform Tx)
sind void 😉
 

Neue Themen


Zurück
Oben