# AffineTransform: Nach Drehen verschieben



## _-`avaj´-_ (4. Mai 2014)

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


----------



## DrZoidberg (6. Mai 2014)

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

```
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.

```
AffineTranform transform = move.concatenate(rotate);
```
oder alternativ

```
AffineTranform transform = rotate.preConcatenate(move);
```


----------



## _-`avaj´-_ (6. Mai 2014)

Hallo,
danke für deine Antwort!
Das ganze funktioniert mit 
	
	
	
	





```
transform.preConcatenate(move)
```
 ganz wunderbar!

Damit hätte sich das Thema dann auch schon wieder 

Vielen Dank nochmal für deine Hilfe!

PS:

```
concatenate(AffineTransform Tx)
```
 bzw. 
	
	
	
	





```
concatenate(AffineTransform Tx)
```
 sind void


----------

