Freigeben über


Matrixdarstellung von Transformationen

Eine m×n-Matrix ist eine Reihe von Zahlen, die in m Zeilen und n Spalten angeordnet sind. Die folgende Abbildung zeigt mehrere Matrizen:

Abbildung mit sechs Matrizen mit unterschiedlichen Dimensionen

Sie können zwei gleich große Matrizen addieren, indem Sie einzelne Elemente addieren. Die folgende Abbildung zeigt zwei Beispiele für Matrixaddition:

Abbildung, die zeigt, wie Die Matrixzugabe ausgeführt wird

Eine m×n-Matrix kann mit einer n×p-Matrix multipliziert werden, und das Ergebnis ist eine m×p-Matrix . Die Anzahl von Spalten in der ersten Matrix muss mit der Anzahl von 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 in der Ebene und Zeilen und Spalten einer Matrix können als Vektoren betrachtet werden. (2, 5) ist beispielsweise ein Vektor mit zwei Komponenten, und (3, 7, 1) ist ein Vektor mit drei Komponenten. Das Punktprodukt zweier Vektoren ist wie folgt definiert:

(a, b) • (c, d) = ac + bd

(a, b, c) • (d, e, f) = ad + be + cf

Das Punktprodukt von (2, 3) und (5, 4) ist beispielsweise (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 zweier Vektoren kein weiterer Vektor, sondern eine Zahl ist. Beachten Sie außerdem, dass Sie das Punktprodukt nur berechnen können, wenn die beiden Vektoren die gleiche Anzahl von Komponenten haben.

Lassen Sie A(i, j) den Eintrag in matrix A in der i. Zeile und der Spalte jth sein. Beispiel: A(3, 2) ist der Eintrag in Matrix A in der 3rd-Zeile und der 2. 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 Matrixmultiplikation:

Abbildung, die zeigt, wie Die Matrixmultiplikation ausgeführt wird

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

Abbildung, die zeigt, wie Sie mithilfe der Matrixmultiplikation einen Punkt auf einer Ebene skalieren, rotieren oder reflektieren

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

Abbildung, die zeigt, wie Matrixmultiplikation und -addition einen Punkt rotieren und zweimal übersetzen können

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-3-Koordinate gespeichert werden. Üblicherweise wird für alle dritten Koordinaten der Wert 1 verwendet. Der Punkt (2, 1) wird also beispielsweise durch die Matrix [2 1 1] dargestellt. Die folgende Abbildung zeigt eine affine Transformation (90 Grad rotieren; übersetzen Sie 3 Einheiten in x-Richtung, 4 Einheiten in y-Richtung), ausgedrückt als Multiplikation durch eine einzelne 3 × 3 Matrix.

Abbildung, die zeigt, wie die Matrixmultiplikation eine affine Transformation ausführen kann

Im vorherigen Beispiel wird der Punkt (2, 1) dem Punkt (2, 6) zugeordnet. Beachten Sie, dass die dritte Spalte der Matrix 3 × 3 die Zahlen 0, 0, 1 enthält. Dies gilt immer 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 3. Zeile stellen die Übersetzung dar.

Abbildung, die zeigt, dass die ersten beiden Spalten für eine 3x3-Matrix einer affinen Transformation am wichtigsten sind

In Windows GDI+ können Sie eine affine Transformation in einem Matrix-Objekt speichern. Da die dritte Spalte einer Matrix, die eine affine Transformation darstellt, immer (0, 0, 1) ist, geben Sie beim Erstellen eines Matrix-Objekts 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 Matrix, die in der vorherigen Abbildung dargestellt ist.

Zusammengesetzte Transformationen

Eine zusammengesetzte Transformation ist eine Sequenz von Transformationen (eine nach der anderen). Sehen Sie sich die Matrizen und Transformationen in der folgenden Liste an:

  • Matrix A Rotieren um 90 Grad
  • Matrix B Skalierung um den Faktor 2 in x-Richtung
  • Matrix C Übersetzen von 3 Einheiten in y-Richtung

Wenn Sie mit dem Punkt (2, 1) beginnen – dargestellt durch die Matrix [2 1 1] – und mit A multiplizieren, dann wird B, dann C, der Punkt (2,1) die drei Transformationen in der aufgeführten Reihenfolge durchlaufen.

[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, in der die gesamte zusammengesetzte Transformation gespeichert wird. Wenn ABC = D ist, liefert ein mit D multiplizierter Punkt das gleiche Ergebnis wie ein Punkt, der mit A, mit B und anschließend mit C multipliziert wird.

[2 1 1] D = [ –2 5 1]

Die folgende Abbildung zeigt die Matrizen A, B, C und D:

Abbildung, die zeigt, wie mehrere Transformationen durch Multiplikation der konstituierenden Matrizen ausgeführt werden

Die Tatsache, dass die Matrix einer zusammengesetzten Transformation durch Multiplikation der einzelnen Transformationsmatrizen gebildet werden kann, bedeutet, dass jede Sequenz affiner Transformationen in einem einzelnen Matrix-Objekt gespeichert werden kann.

Hinweis

Die Reihenfolge einer zusammengesetzten Transformation ist wichtig. Im Allgemeinen ist Drehen > Skalieren > Verschieben nicht das Gleiche wie Skalieren > Drehen > Verschieben. Auch die Reihenfolge der Matrixmultiplikation ist wichtig. ABC ist im Allgemeinen nicht das Gleiche wie BAC.

 

Die Matrix-Klasse bietet mehrere Methoden zum Erstellen einer zusammengesetzten Transformation: Matrix::Multiply, Matrix::Rotate, Matrix::RotateAt, Matrix::Scale, Matrix::Shear und Matrix::Translate. Im folgenden Beispiel wird die Matrix einer zusammengesetzten Transformation erstellt, die sich zuerst um 30 Grad dreht, 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:

Abbildung, die eine Matrix mit Werten zeigt, die als trigonometrische Funktionen ausgedrückt werden, und eine Matrix mit ungefähren Werten dieser Funktionen