Was sind affine Transformationen?


Antworten:


23

Eine affine Transformation ist eine lineare Transformation + ein Übersetzungsvektor.

[xy]=[xy][abcd]+[ef]

Es kann auf einzelne Punkte oder auf Linien oder sogar Bezier-Kurven angewendet werden. Bei Linien bleibt die Eigenschaft erhalten, dass parallele Linien parallel bleiben. Bei Bezier-Kurven bleibt die Konvexhülleneigenschaft der Kontrollpunkte erhalten.

Multiplied-out, es produziert 2 Gleichungen zur Gewinnung von "transformiert" Koordinatenpaar aus dem ursprünglichen Paar ( x , y ) und eine Liste von Konstanten ( a , b , c , d , e , f ) . x ' = a x + c y + e(x,y)(x,y)(a,b,c,d,e,f)

x=ax+cy+ey=bx+dy+f

Praktischerweise können die lineare Transformation und der Translationsvektor zu einer 3D-Matrix zusammengefasst werden, die über homogene 2D-Koordinaten arbeiten kann.

[xy1]=[xy1][ab0cd0ef1]

Was die gleichen 2 Gleichungen oben ergibt.

Sehr bequem können die Matrizen selbst multipliziert werden, um eine dritte Matrix (von Konstanten) zu erzeugen, die die gleiche Transformation ausführt, wie die ursprüngliche 2 in Folge ausführen würde. Einfach ausgedrückt sind die Matrixmultiplikationen assoziativ.

[xy1]=([xy1][ab0cd0ef1])[gh0ij0km1]=[ax+cy+ebx+dy+f1][gh0ij0km1]=[g(ax+cy+e)+i(bx+dy+f)+kh(ax+cy+e)+j(bx+dy+f)+m1]T=[xy1]([ab0cd0ef1][gh0ij0km1])=[xy1][ag+biah+bj0cg+dich+dj0eg+fi+keh+fj+m1]

Alternatively you can consider a few basic transform types and compose any more complex transform by combining these (multiplying them together).

Identity transform

identity transform

[100010001]

Scaling

scaling

[Sx000Sy0001]

*Note: a reflection can be performed with scaling parameters (Sx,Sy)=(1,1) or (1,1).

Translation

translation

[100010TxTy1]

Skew x by y

skew x by y

[1Qx0010001]

Skew y by x

skew y by x

[100Qy10001]

Rotation

rotation

[cosθsinθ0sinθcosθ0001]

[Note I've shown the form of Matrix here which accepts a row vector on the left. The transpose of these matrices will work with a column vector on the right.]

A matrix composed purely from scaling, rotation, and translation can be decomposed back into these three components.


5
Great answer. You might want to add that one way to think about affine transforms is that they keep parallel lines parallel. Hence, scaling, rotation, translation, shear and combinations, count as affine. Perspective projection is an example of a non-affine transformation.
ap_

2
You could add some pictures. If you wont I will :P Also might be good to mention order in matrix and row/column orientation is arbitrary. And that rotations in 3d are not comutative.
joojaa

2
@joojaa I made pictures! postscript sources
luser droog

1
It might also be worth mentioning that rigid body transforms are a subset of affine transforms, and affine transforms are a subset of perspective transforms.
user1118321

I keep re-reading this every once in while and I can't quite tell, but I might have the skew transforms described wrongly. Skews are confusing. If anyone sees this and want to have a go at editing, please help clarify that part!
luser droog
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.