Matrix Klasse
Definition
Wichtig
Einige Informationen beziehen sich auf Vorabversionen, die vor dem Release ggf. grundlegend überarbeitet werden. Microsoft übernimmt hinsichtlich der hier bereitgestellten Informationen keine Gewährleistungen, seien sie ausdrücklich oder konkludent.
Kapselt eine 3:3-affine Matrix, die eine geometrische Transformation darstellt. Diese Klasse kann nicht vererbt werden.
public ref class Matrix sealed : MarshalByRefObject, IDisposable
public sealed class Matrix : MarshalByRefObject, IDisposable
type Matrix = class
inherit MarshalByRefObject
interface IDisposable
Public NotInheritable Class Matrix
Inherits MarshalByRefObject
Implements IDisposable
- Vererbung
- Implementiert
Hinweise
Die Matrix Klasse kapselt eine 3:3-affine Matrix, die eine geometrische Transformation darstellt.
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 matrix, die in der folgenden Abbildung dargestellt ist.
Note
In .NET 6 und höheren Versionen wird das System.Drawing.Common-Paket, das diesen Typ enthält, nur unter Windows-Betriebssystemen unterstützt. Die Verwendung dieses Typs in plattformübergreifenden Apps führt zu Kompilierungszeitwarnungen und Laufzeit-Ausnahmen. Weitere Informationen finden Sie unter System.Drawing.Common wird nur unter Windows unterstützt.
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 Sie mit dem Punkt (2, 1) beginnen - dargestellt durch die Matrix [2 1 1] - und multiplizieren sie mit A, dann B, dann C, der Punkt (2, 1) wird den drei Transformationen in der aufgeführten Reihenfolge unterzogen.
[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.
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.
Caution
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)
Konstruktoren
| Name | Beschreibung |
|---|---|
| Matrix() |
Initialisiert eine neue Instanz der Matrix Klasse als Identitätsmatrix. |
| Matrix(Matrix3x2) |
Erstellt eine Matrix unter Verwendung der angegebenen |
| Matrix(Rectangle, Point[]) |
Initialisiert eine neue Instanz der Matrix Klasse auf die geometrische Transformation, die durch das angegebene Rechteck und das Array von Punkten definiert wird. |
| Matrix(RectangleF, PointF[]) |
Initialisiert eine neue Instanz der Matrix Klasse auf die geometrische Transformation, die durch das angegebene Rechteck und das Array von Punkten definiert wird. |
| Matrix(Single, Single, Single, Single, Single, Single) |
Initialisiert eine neue Instanz der Matrix Klasse mit den angegebenen Elementen. |
Eigenschaften
| Name | Beschreibung |
|---|---|
| Elements |
Ruft ein Array von Gleitkommawerten ab, die die Elemente dieses Matrixdarstellt. |
| IsIdentity |
Ruft einen Wert ab, der angibt, ob diese Matrix die Identitätsmatrix ist. |
| IsInvertible |
Ruft einen Wert ab, der angibt, ob diese Matrix invertierbar ist. |
| MatrixElements |
Ruft die Elemente für die Matrix ab oder legt sie fest. |
| OffsetX |
Ruft den x-Übersetzungswert (der dx-Wert oder das Element in der dritten Zeile und der ersten Spalte) dieses Matrixab. |
| OffsetY |
Ruft den y-Übersetzungswert (der Dy-Wert oder das Element in der dritten Zeile und zweiten Spalte) dieses Matrixab. |
Methoden
| Name | Beschreibung |
|---|---|
| Clone() |
Erstellt eine genaue Kopie dieses MatrixElements. |
| CreateObjRef(Type) |
Erstellt ein Objekt, das alle relevanten Informationen enthält, die zum Generieren eines Proxys erforderlich sind, der für die Kommunikation mit einem Remoteobjekt verwendet wird. (Geerbt von MarshalByRefObject) |
| Dispose() |
Gibt alle von diesem MatrixRessourcen verwendeten Ressourcen frei. |
| Equals(Object) |
Testet, ob das angegebene Objekt ein Matrix ist und mit diesem Matrixidentisch ist. |
| Finalize() |
Ermöglicht es einem Objekt, Ressourcen freizugeben und andere Bereinigungsvorgänge auszuführen, bevor es von der Garbage Collection erneut beansprucht wird. |
| GetHashCode() |
Gibt einen Hashcode zurück. |
| GetLifetimeService() |
Veraltet.
Ruft das aktuelle Lebensdauerdienstobjekt ab, das die Lebensdauerrichtlinie für diese Instanz steuert. (Geerbt von MarshalByRefObject) |
| GetType() |
Ruft die Type der aktuellen Instanz ab. (Geerbt von Object) |
| InitializeLifetimeService() |
Veraltet.
Ruft ein Lebensdauerdienstobjekt ab, um die Lebensdauerrichtlinie für diese Instanz zu steuern. (Geerbt von MarshalByRefObject) |
| Invert() |
Invertiert diese Matrix, wenn sie unvertierbar ist. |
| MemberwiseClone() |
Erstellt eine flache Kopie der aktuellen Object. (Geerbt von Object) |
| MemberwiseClone(Boolean) |
Erstellt eine flache Kopie des aktuellen MarshalByRefObject Objekts. (Geerbt von MarshalByRefObject) |
| Multiply(Matrix, MatrixOrder) |
Multipliziert diese Matrix mit der im |
| Multiply(Matrix) |
Multipliziert diese Matrix mit der im |
| Reset() |
Setzt diese Matrix zurück, damit die Elemente der Identitätsmatrix vorhanden sind. |
| Rotate(Single, MatrixOrder) |
Wendet eine Drehung im Uhrzeigersinn eines im |
| Rotate(Single) |
Wird dieser Matrix eine Drehung im Uhrzeigersinn um den Ursprung und durch den angegebenen Winkel vorangestellt. |
| RotateAt(Single, PointF, MatrixOrder) |
Wendet eine Drehung im Uhrzeigersinn um den angegebenen Punkt auf diese Matrix in der angegebenen Reihenfolge an. |
| RotateAt(Single, PointF) |
Wendet eine Drehung im Uhrzeigersinn auf diese Matrix um den im parameter |
| Scale(Single, Single, MatrixOrder) |
Wendet den angegebenen Skalierungsvektor ( |
| Scale(Single, Single) |
Wendet den angegebenen Skalierungsvektor auf diese Matrix an, indem der Skalierungsvektor voraussteht. |
| Shear(Single, Single, MatrixOrder) |
Wendet den angegebenen Schervektor auf diese Matrix in der angegebenen Reihenfolge an. |
| Shear(Single, Single) |
Wendet den angegebenen Schervektor auf diese Matrix an, indem die Schubtransformation voraussteht. |
| ToString() |
Gibt eine Zeichenfolge zurück, die das aktuelle Objekt darstellt. (Geerbt von Object) |
| TransformPoints(Point[]) |
Wendet die geometrische Transformation, die durch diese Matrix dargestellt wird, auf ein angegebenes Array von Punkten an. |
| TransformPoints(PointF[]) |
Wendet die geometrische Transformation, die durch diese Matrix dargestellt wird, auf ein angegebenes Array von Punkten an. |
| TransformPoints(ReadOnlySpan<Point>) |
Wendet die geometrische Transformation, die durch diese Matrix dargestellt wird, auf ein angegebenes Array von Punkten an. |
| TransformPoints(ReadOnlySpan<PointF>) |
Wendet die geometrische Transformation, die durch diese Matrix dargestellt wird, auf ein angegebenes Array von Punkten an. |
| TransformVectors(Point[]) |
Wendet nur die Skalierungs- und Drehkomponenten dieses Matrix auf das angegebene Array von Punkten an. |
| TransformVectors(PointF[]) |
Multipliziert jeden Vektor in einem Array mit der Matrix. Die Übersetzungselemente dieser Matrix (dritte Zeile) werden ignoriert. |
| TransformVectors(ReadOnlySpan<Point>) |
Multipliziert jeden Vektor in einem Array mit der Matrix. Die Übersetzungselemente dieser Matrix (dritte Zeile) werden ignoriert. |
| TransformVectors(ReadOnlySpan<PointF>) |
Multipliziert jeden Vektor in einem Array mit der Matrix. Die Übersetzungselemente dieser Matrix (dritte Zeile) werden ignoriert. |
| Translate(Single, Single, MatrixOrder) |
Wendet den angegebenen Übersetzungsvektor auf diese Matrix in der angegebenen Reihenfolge an. |
| Translate(Single, Single) |
Wendet den angegebenen Übersetzungsvektor ( |
| VectorTransformPoints(Point[]) |
Multipliziert jeden Vektor in einem Array mit der Matrix. Die Übersetzungselemente dieser Matrix (dritte Zeile) werden ignoriert. |
| VectorTransformPoints(ReadOnlySpan<Point>) |
Multipliziert jeden Vektor in einem Array mit der Matrix. Die Übersetzungselemente dieser Matrix (dritte Zeile) werden ignoriert. |