CiL der RWTH Aachen University Lehrstuhl Informatik 8 Lehr- und Forschungsgebiet Informatik 9

Informatik - Das Richtige für mich?
ein virtueller Besuch einer Vorlesungsstunde

Mehrere Transformationen

Es kommt oft vor, dass man mehrere Transformationen an einem Objekt durchführen möchte. Wenn man dann jeden Punkt mit mehreren Matrizen multiplizieren müsste, wäre das sehr aufwendig, besonders bei komplexen Modellen, die mehrere Millionen Punkte enthalten.

Wie bereits im Bereich Grundlagen angesprochen, sollen alle Transformationen durch eine Matrix repräsentiert werden. Also müssen die entsprechenden Matrizen miteinander multipliziert werden.

Zuerst ein einfaches Beispiel:

Wenn du das Haus erst um 25 Grad und dann um 20 Grad rotierst, erhälst du das gleiche Ergebnis wie bei einer Rotation um 45 Grad.

Das kann man auch rechnerisch nachweisen. Dazu muss folgende Gleichung erfüllt sein: R(45) = R(20) * R(25)

R(20) * R(25) = Rotation * Rotation

In der ersten Zeile ergibt sich nach der Multiplikation:

1. Komponente: (cos 20 * cos 25)-(sin 20 * sin 25)+0   
2. Komponente: -((cos 20 * sin 25)+(sin 20 * cos 25))+0
3. Komponente: 0

Mit Hilfe der Additionstheoreme erhält man:

   cos (20+25)   - sin (20+25)   0
=  cos (45)      - sin (45)      0   
=  erste Zeile der Matrix R(45)

Die anderen Zeilen kannst du ja selbst mal nachrechnen.

Matrizenmultiplikation ist nicht kommutativ!

Achtung Wenn man eine "Transformationsmatrix" berechnet, muss die Reihenfolge der Matrizen unbedingt beachtet werden. Die Matrizenmultiplikation ist nämlich nicht kommutativ! Es macht also einen Unterschied, ob man ein Objekt erst rotiert und dann verschiebt (transliert) oder umgekehrt.

Versuche eine Multiplikationsreihenfolge und Faktoren zu finden, die das Haus im linken oberen Quadranten auf die linke Seite legen. Wende anschließend die gleichen Transformationen mit den gleichen Faktoren aber in umgekehrter Reihenfolge an. Was kannst du beobachten?

Jede neue Transformation (N) bzw. die Matrix, die sie repräsentiert, wird mit der bestehenden Matrix (M) multipliziert, und zwar in der Reihenfolge: Neue Matrix * bestehende Matrix!

Also:
Matrix[Neue Transformation] * Matrix[bestehende Transformationen] = Matrix[alle Transformationen]
oder kürzer: N*M --> M

Ein weiteres Beispiel:

Verschiebe im Applet das Haus mit Hilfe der Maus in den rechten oberen Quadranten, so dass es an der im linken Bild dargestellten Stelle positioniert ist. Versuche dann, das Haus um seine eigene Mitte um 90 Grad nach links zu drehen (wie im rechten Bild dargestellt). Welche Transformationen mit welchen Faktoren müssen in welcher Reihenfolge durchgeführt werden?

Rotation   Rotation

Allgemein: Das Haus befindet sich nicht im Ursprung, soll aber um seine Mitte (cx, cy) rotiert werden.

Zunächst muss das Haus in den Ursprung verschoben werden: T(-cx,-cy).
Dann wird es (um einen Winkel α) rotiert: R(α).
Und schließlich wird das gedrehte Haus wieder zurück verschoben: T(cx,cy).

Die Reihenfolge der Multiplikation ist dann die folgende:

T(cx,cy) * R(α) * T (-cx,-cy)