Auch dieser Teil ist wieder gemeinsam für Rasterung/Schattierung und Raytracing.
Um Objekte im Raum zu platzieren, müssen wir die Koordinaten ihrer Eckpunkte angeben. Für ein kompliziertes Objekt aus vielen Punkten, das irgendwie im Raum verdreht ist, kann das schwierig werden. Meistens ist es einfacher, die Punkte des Objekts in einer »Standardlage« anzugeben. Von dort aus können wir es in die gewünschte Lage »transformieren«.
Inhaltsverzeichnis
- Lineare Transformationen
- Lineare Abbildungen
- Matrizen
- Interpretation der Spalten einer Matrix
- Matrizenmultiplikation
- Inverse Matrix
- Verschiebungen
- Diskussion
Lineare Transformationen
Transformationen bilden Punkte auf anderen Punkte
ab, sind also Funktionen von der Ebene in die Ebene (bzw. vom Raum in den Raum). Der Punkt
heißt das Bild von
.
Lineare Transformationen haben zusätzlich zwei schöne Eigenschaften, die wir uns anhand der »Drehung 90° um den Ursprung (gegen den Uhrzeigersinn)« ansehen wollen (s. Abb. 1). Statt Drehung sagt man oft auch Rotation.

Gezeigt ist sie nur für den Punkt , der auf den Punkt
abgebildet wird. Für beliebige Punkte
gilt dabei
wie man leicht überprüfen kann. Dabei bedeutet die Durchführung unserer Drehung
.
Statt der Punkte werden normalerweise ihre Ortsvektoren bzw.
verwendet. Für mich ist ein Punkt synonym zu seinem Ortsvektor, weil sich eigentlich nur die Schreibweise ändert:
Abb. 2 zeigt die Drehung 90° um den Ursprung noch einmal für die entsprechenden (Orts)vektoren.

Wenn wir statt dem Vektor a den doppelt so langen Vektor drehen, ist der gedrehte Vektor
einfach
(s. Abb. 3). Es ist also egal, ob wir den Vektor vorher mit einer Zahl multiplizieren und dann drehen, oder ob wir zuerst drehen und dann mit dieser Zahl multiplizieren.

Wie Abb. 4 an einem Beispiel zeigt, ist es auch egal, ob wir zwei Vektoren zuerst addieren und dann ihre Summe 90° drehen, oder ob wir zuerst beide drehen und dann addieren. Damit Abb. 4 nicht zu überladen ist, habe ich die Vektoren und
nur parallel verschoben gezeichnet. Verschiebt man sie zurück in den Ursprung, sind sie zueinander 90° gedreht.

Insgesamt können wir das folgendermaßen schreiben:
wobei eine beliebige reelle Zahl ist. Transformationen mit diesen Eigenschaften nennt man linear.
Lineare Transformationen bilden gerade Linien wieder auf gerade Linien ab, und parallele Linien bleiben parallel. (Daher reicht es in der Computergraphik, wieder nur die Endpunkte der Linien zu transformieren.) Wenn wir möchten, dass auch Längen und Winkel erhalten bleiben, müssen wir uns auf orthogonale Transformationen beschränken (die auch linear sind). Unsere perspektivische Projektion ist übrigens nicht-linear.
Lineare Abbildungen
Die beiden Eigenschaften oben kommen in der Mathematik immer wieder vor. Generell nennt man eine Abbildung f mit den Eigenschaften
eine lineare Abbildung. Das Schöne daran ist, dass diese Abbildungen/Transformationen die Struktur von Addition und Multiplikation mit einer Zahl erhalten.
Die Linearität von Abbildungen ist daher eine Verallgemeinerung des Distributivgesetzes.
Unter den reellen Funktionen gibt es genau eine Abbildung, die das erfüllt: die lineare Funktion
die jeden Wert x mit derselben Konstante k multipliziert. Es gilt nämlich
und
für alle reelle Zahlen a und b.
Matrizen
Da stellt sich natürlich die Frage, ob wir unsere lineare Transformation, die Punkte/Vektoren in der Ebene um 90° dreht, auch irgendwie als »Multiplikation«
mit irgendeinem Objekt schreiben können. Aber was ist dieses
genau und welche Rechenregeln gelten dafür?
Schreiben wir die Sache etwas ausführlicher auf:
In jeder Zeile werden dabei die x– und y-Komponenten von a mit Zahlen multipliziert und dann addiert. Diese Zahlen können wir in folgendem Schema notieren:
Dabei nennen wir
eine (quadratische) Matrix mit 2 Zeilen und 2 Spalten bzw. eine -Matrix. Die
sind die Elemente der Matrix
. Der 1. Index i zählt die Zeile, der 2. Index j zählt die Spalte.
Zur Multiplikation mit einem Vektor vereinbaren wir folgendes: Für die x-Komponente des Ergebnisses werden die Werte in der 1. Zeile der Matrix mit den Komponenten von a multipliziert und dann addiert; für die y-Komponente des Ergebnisses nehmen wir die 2. Zeile.
Matrizen und lineare Abbildungen
Für eine beliebige -Matrix
sieht das dann so aus:
Wie man leicht nachrechnet, ist diese Matrix-Vektor-Multiplikation tatsächlich linear:
Im allgemeinen Fall muss eine Matrix nicht gleich viele Zeilen wie Spalten haben. Damit wir sie sinnvoll mit einem Vektor multiplizieren können, muss ihre Spaltenanzahl aber gleich der Anzahl der Vektor-Komponenten sein. Der Ergebnisvektor hat dann genauso viele Komponenten wie die Matrix Zeilen.
Interpretation der Spalten einer Matrix
Jeder Ortsvektor a lässt sich auch als die Summe (Linearkombination)
schreiben. Dabei ist der Einheitsvektor in x-Richtung und
der Einheitsvektor in y-Richtung. Diese Vektoren bilden die Standardbasis der Ebene, weil jeder Vektor eindeutig als Linearkombination davon geschrieben werden kann.
Für die Multiplikation mit der Matrix gilt dann wegen der Linearität
D.h., wenn wir wissen wollen, was unsere Matrix mit einem beliebigen Punkt macht, müssen wir nur wissen, was sie mit den Basisvektoren anstellt.
Lineare Transformationen sind durch die Bilder der Basisvektoren vollständig bestimmt.
Und was sind die Bilder der Standard-Basisvektoren? Das sind die Spalten der Transformations-Matrix:
Das Bild von ist die erste Spalte der Matrix, und das Bild von
ist die zweite Spalte.
Im Folgenden sehen wir uns ein paar Beispiele für geometrisch interessante Matrizen an.
Einheitsmatrix
Zunächst gibt es eine Matrix, deren Spalten einfach die Einheitsvektoren der Standardbasis selber sind. Diese Einheitsmatrix
bildet daher alle Vektoren auf sich selber ab:
Die Multiplikation mit der Einheitsmatrix entspricht der Multiplikation mit 1 in den reellen/komplexen Zahlen.
Skalierung
Die Matrix
multipliziert die Einheitsvektoren der Standardbasis mit den Konstanten bzw.
. Dadurch wird jeder Punkt in x– bzw. y-Richtung skaliert:
Abb. 5 zeigt die Skalierung eines grünen Fs. Dessen Eckpunkte wurden in x-Richtung mit 2 und in y-Richtung mit 0.75 skaliert.

Spiegelungen
Wenn wir einen Punkt an der x-Achse spiegeln, müssen wir das Vorzeichen seiner y-Koordinate umdrehen. Ähnlich ist es für die Spiegelung an der y-Achse. Die entsprechenden Matrizen sind daher ebenfalls leichte Abwandlungen der Einheitsmatrix
weil
gilt.
Abb. 6 zeigt die Spiegelung der Eckpunkte des grünen Fs an der x– und der y-Achse.

Allgemeine Drehungen/Rotationen
Wenn wir einen Punkt einen beliebigen Winkel um den Ursprung drehen wollen, müssen wir uns das wieder nur für die Standard-Basisvektoren anschauen. Positive Winkel drehen dabei gegen den Uhrzeigersinn.

Die gedrehten Basisvektoren in Abb. 7 haben weiterhin die Länge 1. Ihre x– und y-Komponenten bekommen wir über die Winkelfunktionen in den grünen rechtwinkeligen Dreiecken:
Die Bilder dieser Basisvektoren müssen die Spalten unserer Rotationsmatrix
sein.
Mit ergibt sich daraus unsere Drehmatrix
von oben. (Statt
für Drehung verwende ich jetzt das üblichere
für Rotation.)
Abb. 8 zeigt die Rotation des grünen Fs 60° um den Ursprung. Die entsprechende Rotationsmatrix ist

Matrizenmultiplikation
Meistens werden wir mit einer der obigen Transformationen alleine nicht auskommen. Es hält uns aber niemand auf, mehrere Transformationen hintereinander durchzuführen. Z.B. zuerst eine Drehung 60° um den Ursprung und dann eine Spiegelung an der x-Achse:
.
Können wir das auch mit nur einer Transformationsmatrix machen? D.h., gilt hier auch das Assoziativgesetz
Ja, das gilt tatsächlich! Mit den Abkürzungen und
können wir uns mithilfe der Standardbasis folgendes überlegen:
Der Standard-Basisvektor wird durch die Rotation zur 1. Spalte
von
. Aus diesem Vektor macht die Matrix
den Vektor
Und weil das das endgültige Bild von ist, muss das auch die 1. Spalte unserer Produktmatrix
sein.
Dasselbe Spiel können wir für machen. Durch die Rotation wird sein Bild zur 2. Spalte von
, woraus die Matrix
macht. Und das muss jetzt die 2. Spalte unseres Produkts sein.
Wenn wir zwei –Matrizen multiplizieren wollen, können wir die Spalten der zweiten Matrix als Vektoren auffassen und jeweils mit der ersten Matrix multiplizieren. Wir haben so das Produkt zweier Matrizen auf n Matrix-Vektor-Produkte zurückgeführt.
Schauen wir uns nochmal genau an, wie es zu den Elementen der Produktmatrix
kommt. Offensichtlich gilt
So können wir die Elemente des Produkts direkt ausrechnen. Bei der Multiplikation größerer Matrizen kämen noch
dazu.
Eine schöne Eigenschaft der Multiplikation reeller/komplexer Zahlen gilt für die Matrizenmultiplikation leider nicht. In Abb. 9 erhalten wir das rote F, indem wir das grüne F zuerst 60° um den Ursprung drehen und dann an der x-Achse spiegeln. Spiegeln wir es jedoch zuerst an der x-Achse und drehen es dann 60° um den Ursprung, erhalten wir das blaue F. Offensichtlich sind das rote und das blaue F verschieden!

Die Reihenfolge der Transformationen ist nicht vertauschbar! Im Allgemeinen ist die Multiplikation von Matrizen also nicht kommutativ:
.
Wenn wir mehrere Transformationen hintereinander ausführen, muss die Matrix der ersten Transformation im Produkt ganz rechts und die der letzten Transformation ganz links stehen.
Inverse Matrix
In der Mathematik wie im Leben ist es gut, wenn man Dinge auch wieder rückgängig machen kann. Wenn wir z.B. Punkte 60° um den Ursprung drehen und dann 60° zurück (also um -60°), ist insgesamt nichts passiert:
Man sagt, die Matrizen und
sind invers zueinander, und schreibt
Das demonstriert auch, dass die Inverse der Inversen die ursprüngliche Matrix ist:
Die Spiegelung an der x-Achse können wir durch eine weitere Spiegelung an der x-Achse ungeschehen machen. Manche Matrizen sind also zu sich selber invers:
.
(In den reellen/komplexen Zahlen gilt das nur für .)
Obwohl wir durch Matrizen nicht dividieren können, kommen wir der Division mit inversen Matrizen noch am nächsten. Leider können wir nicht jede Matrix invertieren. Z.B. bildet die Matrix
alle Punkte der Ebene auf eine Gerade mit 45°-Steigung ab. Speziell gilt
D.h., zumindest zwei verschiedene Punkte haben dasselbe Bild. Wir haben keine Chance, die Abbildung rückgängig zu machen. Damit eine Matrix invertierbar ist, muss ihre Determinante ungleich 0 sein.
Man kann sich eine allgemeine Formel für die inverse Matrix überlegen. Für unsere Transformationen ist es jedoch geometrisch klar, wie wir sie umkehren können.
Was passiert, wenn wir wie oben zwei Transformationen nacheinander ausgeführt haben, und dann wieder zurück wollen? Wenn wir z.B. zuerst gedreht und dann gespiegelt haben (), müssen wir zuerst die Spiegelung und dann die Rotation umkehren:
Für die Inverse des Produkts zweier beliebiger Matrizen und
gilt daher
Verschiebungen
Lineare Transformationen bilden den Ursprung immer auf den Ursprung ab. Warum? Wegen der Linearität gilt (wie beim Distributivgesetz)
.
Nach Subtraktion von auf beiden Seiten folgt
.
Damit wir Objekte mittels Matrix-Vektor-Multiplikationen auch verschieben – 0 also auf einen anderen Punkt abbilden – können, müssen wir etwas tricksen. Die Idee der Verschiebung (Translation) ist mathematisch in der Addition realisiert. Und zum Glück steckt die Addition schon in unserer Matrix-Vektor-Multiplikation drinnen.
Wenn wir einen Punkt um verschieben wollen, hätten wir gerne
In der ausführlichen Version erinnert das schon an die Matrix-Vektor-Multiplikation. Der Trick besteht darin, dass wir z.B. statt
schreiben. Dadurch wird der Einser zu einer weiteren Komponente (w-Komponente) des Ortsvektors und
bzw.
stehen in der Matrix:
Was sollen wir statt der »?« nehmen? Die etwas künstlich hinzugefügte w-Komponente sollte nicht von x und y abhängen, und außerdem 1 bleiben. Da bleibt nur die Variante
Wir nehmen also künstlich eine 3. Dimension zu den Punkten unserer Ebene dazu. Wenn wir das Ganze im Raum machen, haben wir die x-, y– und z-Komponenten und zusätzlich die w-Komponente als künstliche 4. Dimension. Mit der w-Komponente können wir noch etwas mehr tricksen, speziell in der Projektionsmatrix (die die Projektion vorbereitet, aber nicht durchführt). Für die Transformation von Objekten in der Szene lassen wir sie jedoch bei 1 (und müssten sie da eigentlich gar nicht speichern).
Statt der Einheitsmatrix könnte links oben irgendeine unserer bisherigen Tarnsformationsmatrizen stehen:
Dadurch wird unsere Transformation durchgeführt und anschließend verschoben.
Wenn wir also z.B. um einen anderen Punkt als den Ursprung drehen wollen, können wir diesen Punkt zuerst in den Ursprung verschieben, und alle anderen Punkte entsprechend. Dann können wir um den Ursprung drehen und zum Schluss schieben wir alle Punkte wieder zurück. Sehen wir uns das anhand der Animation in Abb. 10 an.

Das grüne F soll jetzt 60° um den Punkt (1|1) gedreht werden. Dazu müssen wir alle Punkte zuerst um (-1|-1) verschieben, dann um den Ursprung drehen und schließlich wieder zurückschieben. Mit der Matrizenmultiplikation erhalten wir die Transformationsmatrix
Interessanterweise ändert sich am Rotationsteil gar nichts, aber die Verschiebung (1.366|-0.366) der Gesamttransformation ist etwas komisch. Die Gesamttransformation entspricht einfach einer Drehung um den Ursprung und einer anschließenden Verschiebung (s. Abb. 11).

Diskussion
Mittels Transformationen lassen sich Objekte aus vielen Punkten leicht in der Ebene (im Raum) drehen, spiegeln, skalieren und auch verschieben. Sie sind daher ein beliebtes Hilfsmittel, um komplizierte Objekte in einer Standardlage zu definieren, sie dort »anzumalen« und dann in der Szene zu positionieren. Ähnlich kann man mit Transformationen die Kamera beliebig im Raum positionieren (indem der Rest der Szene genau umgekehrt transformiert wird).
Diese Objekt-Transformationen können zu unterschiedlichen Zeitpunkten unterschiedlich sein, sodass wir in jedem Frame die Objekte etwas anders positionieren. Dadurch sind beliebig komplizierte Bewegungen möglich. Wenn wir Teile eines Objekts (z.B. einen Körperteil) animieren wollen, wird die Sache etwas komplizierter.
Obwohl wir Punkte auch anders rotieren oder mit einer einfachen Vektoraddition verschieben könnten, machen wir es mit einer -Matrix. Warum? Weil moderne Graphikkarten darauf optimiert sind, tausende von solchen Matrix-Multiplikationen parallel durchzuführen. Wenn wir eine Operation – egal wie künstlich – auch mit einer Matrix durchführen können, dann machen wir das. Etwas übertrieben könnte man sagen: »If all you have is a hammer, everything looks like a nail.« Jedenfalls kommen Matrizen aufgrund ihrer Nützlichkeit in der Computergraphik praktisch überall vor (auch in 2D-Programmen).