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 von Matrizen

Sie können zwei Matrizen derselben Größe hinzufügen, indem Sie einzelne Elemente hinzufügen. Die folgende Abbildung zeigt zwei Beispiele der Matrixaddition.

Abbildung der Matrixaddition

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 übereinstimmen. 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. Beispielsweise ist (2, 5) ein Vektor mit zwei Komponenten, und (3, 7, 1) ist ein Vektor mit drei Komponenten. Das Punktprodukt von zwei 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 von zwei Vektoren eine Zahl und kein anderer Vektor ist. Beachten Sie außerdem, dass Sie das Punktprodukt nur berechnen können, wenn die beiden Vektoren dieselbe Anzahl von Komponenten haben.

A(i, j) sei der Eintrag in Matrix A in der i-ten Zeile und der j-ten Spalte. Beispielsweise ist A(3, 2) der Eintrag in Matrix A in der 3. 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 die Matrixmultiplikation.

Abbildung der Matrixmultiplikation

Wenn Sie sich einen Punkt in einer 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).

Matrixtransformation für einen Punkt auf einer Ebene

Alle in der vorherigen Abbildung gezeigten Transformationen sind lineare Transformationen. Bestimmte andere Transformationen, z. B. Übersetzungen, sind nicht linear und können nicht als Multiplikation durch eine 2×2-Matrix 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 entlang der x-Achse und um vier Einheiten entlang der y-Achse verschieben. Sie können dies erreichen, indem Sie eine Matrixmultiplikation gefolgt von einer Matrixzugabe verwenden.

Abbildung: Matrixmultiplikation mit anschließender Matrixaddition

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 Matrizenpaar (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 dritten Hilfskoordinate gespeichert werden. Üblicherweise wird für alle dritten Koordinaten der Wert 1 verwendet. Beispielsweise wird der Punkt (2, 1) durch die Matrix [2 1 1] dargestellt. Die folgende Abbildung zeigt eine affine Transformation (90-Grad-Drehung sowie Verschiebung um drei Einheiten in x-Richtung und um vier Einheiten in y-Richtung) als Multiplikation mit einer einzelnen 3×3-Matrix:

Abbildung einer affinen Transformation

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 Teil 2×2 der Matrix stellt den linearen Teil der Transformation dar, und die ersten beiden Einträge in der 3. Zeile stellen die Übersetzung dar.

Abbildung des linearen Teils und der Verschiebung einer Matrixtransformation

In 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 nur die sechs Zahlen in den ersten beiden Spalten an, wenn Sie ein Matrix-Objekt erstellen. Die Anweisung Matrix myMatrix = new Matrix(0, 1, -1, 0, 3, 4) erstellt die in der vorherigen Abbildung gezeigte Matrix.

Zusammengesetzte Transformationen

Eine zusammengesetzte Transformation ist eine Sequenz von Transformationen, eine nach der anderen. Betrachten Sie die Matrizen und Transformationen in der folgenden Liste:

Matrix Umwandlung
Matrix A Um 90 Grad drehen
Matrix B Um den Faktor 2 in x-Richtung skalieren
Matrix C Um drei Einheiten entlang der y-Achse verschieben

Wenn wir mit dem Punkt (2, 1) beginnen – dargestellt durch die Matrix [2 1 1] – und multiplizieren dann mit A, dann B, dann C, wird der Punkt (2, 1) die drei Transformationen in der angegebenen 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, die die gesamte zusammengesetzte Transformation speichert. Angenommen ABC = D. Dann gibt ein mit D multiplizierter Punkt dasselbe Ergebnis wie ein mit A multiplizierter Punkt, dann B und dann C.

[2 1 1]D = [-2 5 1]

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

Abbildung der Matrix A, B, C und D.

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

Vorsicht

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

Die Matrix Klasse bietet verschiedene Methoden zum Erstellen einer zusammengesetzten Transformation: Multiply, Rotate, RotateAt, Scale, Shearund Translate. Im folgenden Beispiel wird die Matrix einer zusammengesetzten Transformation erstellt. Dabei wird zuerst eine 30-Grad-Drehung durchgeführt. Danach folgen eine Skalierung um den Faktor 2 in y-Richtung und eine Verschiebung um fünf Einheiten in x-Richtung:

Matrix myMatrix = new Matrix();
myMatrix.Rotate(30);
myMatrix.Scale(1, 2, MatrixOrder.Append);
myMatrix.Translate(5, 0, MatrixOrder.Append);
Dim myMatrix As New Matrix()
myMatrix.Rotate(30)
myMatrix.Scale(1, 2, MatrixOrder.Append)
myMatrix.Translate(5, 0, MatrixOrder.Append)

Die folgende Abbildung zeigt die Matrix.

Matrixdarstellung einer zusammengesetzten Transformation.

Weitere Informationen