Matrizen

"Keiner weiß genau, was die Matrix ist." - Morpheus in Matrix

Matrix

Wir haben gesehen, dass wir mit Vektoren rechnen können. Um kompliziertere Operationen wie z.B. Rotationen auf Vektoren durchführen zu können, verwendet man häufig Multiplikationen mit Matrizen.

Eine Matrix ist einem Vektor ähnlich, nur dass Zahlen in einem zweidimensionalen Feld zusammengefasst werden. Es ist fast, als schriebe man mehrere Vektoren nebeineinander in ein Array. Hier eine 3x3 Matrix mit neun Elementen:

3x3 Matrix Definition

Matrix-Vektor Multiplikation

Einen Vektor mit einer Matrix zu multiplizieren, ist keine Hexerei. Betrachten wir der Einfachheit halber zweidimensionale Vektoren und Matrizen. Nehmen wir an, der Vektor b wird von rechts an die Matrix multipliziert wie im Bild. Das Ergebnis rechts ist wieder ein Spaltenvektor mit zwei Einträgen.

Matrix-Vektor Multiplikation

Und so gehts: Um das obere, rot eingefärbte Element des Ergebnisses zu bestimmen, nimmt man die erste horizontale Zeile der Matrix und multipliziert sie wie beim Skalarprodukt mit dem vertikalen Spaltenvektor, also linkes Element der Matrix mit oberem Element des Vektors plus rechtes Element der Matrix mit unterem Element des Vektors.

Das untere Element des Ergebnisses erhält man, wenn man genauso die zweite Zeile der Matrix mit dem Spaltenvektor multipliziert. In drei Dimensionen ändert sich an der Vorgehensweise auch nichts. Immer Zeile mal Spalte. Matrix-Vektormultiplikation ist also im Grunde nur eine Art und Weise, kompliziertere Additionen und Multiplikationen einfacher schreiben zu können.

Matrix-Matrix Multiplikation

Geht im Prinzip genauso wie Matrix-Vektor Multiplikation. Rechts steht jetzt auch noch eine Matrix, aber es geht wieder so:

Element a11 im Ergebnis heißt: erste Zeile der linken Matrix mit erster Spalte der rechten Matrix multiplizieren... Für Element a21 die zweite Zeile links mit der ersten Spalte rechts... Element a22 ist die zweite Zeile von links mit der zweiten Spalte der rechten Matrix etc. pp. Eigentlich ganz einfach.

Warum das Ganze?

Geschwindigkeit.

Rotationen, Skalierungen usw. werden in OpenGL mit 4x4 Matrizen realisiert. Es ist nicht so wichtig, wie diese Matrizen im Einzelnen aufgebaut sind, aber eine Sache daran ist toll. Anstatt einen Vektor zuerst mit Matrix 1, danach mit Matrix 2 und anschließend mit Matrix 3 zu multiplizieren, kann man den Vektor einfach mit dem vorher berechneten Matrixprodukt der Matrizen multiplizieren, also statt

Langsame Multiplikation mit mehreren Matrizen

kann man schreiben

Schnelle Matrixmultiplikation mit mehreren Matrizen

Das hat einen Vorteil. Will man nämlich ganz viele Punkte auf die gleiche Weise rotieren, skalieren und verschieben, dann multipliziet man nur ein Mal die Matrizen für Rotation, Skalierung und Translation, und kann die dabei entstandene Matrix M auf alle Punkte anwenden. Das ist einerseits handlich, andererseits bei komplizierten Transformationen auch wesentlich schneller.

Reihenfolge von Transformationen

Die Reihenfolge, in der Matrizen miteinander multipliziert werden, ist wichtig.

Es ist also nicht egal, ob Punkte zuerst verschoben und danach das um den Ursprung rotiert werden, oder ob zuerst rotiert wird, und dann verschoben. Im ersten Fall fliegt das Objekt um den Ursprung herum, im zweiten Fall rotiert es in sich, aber etwas vom Ursprung entfernt.

zurück