Matrixdarstellung von Transformationen
Eine m×n-Matrix ist ein Satz von Zahlen, die in m Zeilen und n Spalten angeordnet sind. Die folgende Abbildung zeigt mehrere Matrizen.

Sie können zwei Matrizen derselben Größe hinzufügen, indem Sie einzelne Elemente hinzufügen. Die folgende Abbildung zeigt zwei Beispiele für die Matrixhinzufügung.

Eine m×n-Matrix kann mit einer n×p-Matrix multipliziert werden, und das Ergebnis ist eine m×p-Matrix. Die Anzahl der Spalten in der ersten Matrix muss mit der Anzahl der Zeilen in der zweiten Matrix identisch sein. Beispielsweise kann eine 4 ×2-Matrix mit einer 2 ×3-Matrix multipliziert werden, um eine 4 ×3-Matrix zu erzeugen.
Punkte auf der Ebene sowie Zeilen und Spalten einer Matrix können als Vektoren bezeichnet werden. (2, 5) ist beispielsweise ein Vektor mit zwei Komponenten, und (3, 7, 1) ist ein Vektor mit drei Komponenten. Das Punktprodukt von zwei Vektoren wird wie folgt definiert:
(a, b) • (c, d) = ac + bd
(a, b, c) • (d, e, f) = ad + be + cf
Beispielsweise ist das Punktprodukt von (2, 3) und (5, 4) (2)(5) + (3)(4) = 22. Das Punktprodukt von (2, 5, 1) und (4, 3, 1) ist (2)(4) + (5)(3) + (1)(1) = 24. Beachten Sie, dass das Punktprodukt von zwei Vektoren eine Zahl und kein anderer Vektor ist. Beachten Sie auch, dass Sie das Punktprodukt nur berechnen können, wenn die beiden Vektoren die gleiche Anzahl von Komponenten aufweisen.
Lassen Sie A(i, j) der Eintrag in Matrix A in der i.th-Zeile und der j-ten Spalte sein. A(3, 2) ist z. B. der Eintrag in Matrix A in der Zeile 3 rd und der zweiten Spalte. Angenommen, A, B und C sind Matrizen, und AB = C. Die Einträge von C werden wie folgt berechnet:
C(i, j) = (Zeile i von A) • (Spalte j von B)
Die folgende Abbildung zeigt mehrere Beispiele für die Matrixmultiplikation.

Wenn Sie sich einen Punkt auf der Ebene als 1 × 2-Matrix vorstellen, können Sie diesen Punkt transformieren, indem Sie ihn mit einer 2 × 2-Matrix multiplizieren. Die folgende Abbildung zeigt mehrere Transformationen, die auf den Punkt angewendet werden (2, 1).

Alle in der vorherigen Abbildung gezeigten Transformationen sind lineare Transformationen. Bestimmte andere Transformationen, z. B. die Übersetzung, sind nicht linear und können nicht durch eine 2 × 2-Matrix als Multiplikation ausgedrückt werden. Angenommen, Sie möchten mit dem Punkt (2, 1) beginnen, ihn um 90 Grad drehen, 3 Einheiten in x Richtung und 4 Einheiten in y Richtung übersetzen. Sie können dies erreichen, indem Sie eine Matrixmultiplikation gefolgt von einer Matrixhinzufügung ausführen.

Eine lineare Transformation (Multiplikation durch eine 2 × 2-Matrix), gefolgt von einer Übersetzung (Addition einer 1 × 2-Matrix), wird als affine Transformation bezeichnet. Eine Alternative zum Speichern einer affinen Transformation in einem Paar von Matrizen (eine für den linearen Teil und eine für die Übersetzung) besteht darin, die gesamte Transformation in einer 3 × 3-Matrix zu speichern. Damit dies funktioniert, muss ein Punkt in der Ebene in einer 1 × 3-Matrix mit einer dummy-dritten Koordinate gespeichert werden. Die übliche Technik besteht darin, alle dritten Koordinaten gleich 1 zu machen. Beispielsweise wird der Punkt (2, 1) durch die Matrix [ 2 1 1 ] dargestellt. Die folgende Abbildung zeigt eine affine Transformation (um 90 Grad drehen; 3 Einheiten in x Richtung übersetzen, 4 Einheiten in y-Richtung), ausgedrückt als Multiplikation durch eine einzelne 3 × 3-Matrix.

Im vorherigen Beispiel wird der Punkt (2, 1) dem Punkt (2, 6) zugeordnet. Beachten Sie, dass die dritte Spalte der 3 × 3-Matrix die Zahlen 0, 0, 1 enthält. Dies ist immer der Fall für die 3 × 3-Matrix einer affinen Transformation. Die wichtigen Zahlen sind die sechs Zahlen in den Spalten 1 und 2. Der obere linke 2 × 2 Teil der Matrix stellt den linearen Teil der Transformation dar, und die ersten beiden Einträge in der dritten Zeile stellen die Übersetzung dar.

In Windows GDI+ können Sie eine affine Transformation in einem Matrixobjekt speichern. Da die dritte Spalte einer Matrix, die eine affine Transformation darstellt, immer ist (0, 0, 1), geben Sie beim Erstellen eines Matrixobjekts nur die sechs Zahlen in den ersten beiden Spalten an. Die -Anweisung Matrix myMatrix(0.0f, 1.0f, -1.0f, 0.0f, 3.0f, 4.0f); erstellt die in der vorherigen Abbildung gezeigte Matrix.
Zusammengesetzte Transformationen
Eine zusammengesetzte Transformation ist eine Folge von Transformationen, gefolgt von der anderen. Betrachten Sie die Matrizen und Transformationen in der folgenden Liste:
- Matrix A Um 90° drehen Grad
- Matrix B Skalieren um den Faktor 2 in x Richtung
- Matrix C– 3 Einheiten in y-Richtung übersetzen
Wenn Sie mit dem Punkt (2, 1) – dargestellt durch die Matrix [ 2 1 1 – beginnen ] und mit A multiplizieren, dann B, dann C, durchläuft der Punkt (2,1) die drei Transformationen in der aufgeführten Reihenfolge.
[2 1 1 ] ABC = [ –2 5 1]
Anstatt die drei Teile der zusammengesetzten Transformation in drei separaten Matrizen zu speichern, können Sie A, B und C zusammen multiplizieren, um eine einzelne 3 × 3 Matrix zu erhalten, die die gesamte zusammengesetzte Transformation speichert. Angenommen, ABC = D. Dann ergibt ein Punkt multipliziert mit D das gleiche Ergebnis wie ein Punkt multipliziert mit A, dann B und C.
[2 1 1 ] D = [ –2 5 1]
Die folgende Abbildung zeigt die Matrizen A, B, C und D.

Die Tatsache, dass die Matrix einer zusammengesetzten Transformation durch Multiplikation der einzelnen Transformationsmatrizen gebildet werden kann, bedeutet, dass jede Sequenz von affinen Transformationen in einem einzelnen Matrixobjekt gespeichert werden kann.
Hinweis
Die Reihenfolge einer zusammengesetzten Transformation ist wichtig. Im Allgemeinen ist drehen, skalieren und übersetzen nicht identisch mit der Skala, dann drehen und übersetzen. Ebenso ist die Reihenfolge der Matrixmultiplikation wichtig. Im Allgemeinen ist ABC nicht identisch mit BAC.
Die Matrix-Klasse stellt mehrere Methoden zum Erstellen einer zusammengesetzten Transformation bereit: Matrix::Multiply, Matrix::Rotate, Matrix::RotateAt, Matrix::Scale, Matrix::Shearund Matrix::Translate. Im folgenden Beispiel wird die Matrix einer zusammengesetzten Transformation erstellt, die zuerst um 30 Grad gedreht, dann um den Faktor 2 in y-Richtung skaliert und dann 5 Einheiten in x-Richtung übersetzt.
Matrix myMatrix;
myMatrix.Rotate(30.0f);
myMatrix.Scale(1.0f, 2.0f, MatrixOrderAppend);
myMatrix.Translate(5.0f, 0.0f, MatrixOrderAppend);
Die folgende Abbildung zeigt die Matrix.
