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 affine 3 x 3-Matrix ein, 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
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 folgenden Abbildung gezeigte Matrix.
Hinweis
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 verursacht Kompilierzeitwarnungen und Laufzeitausnahmen. 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). Sehen Sie sich die Matrizen und Transformationen in der folgenden Liste an:
Matrix A | Um 90 Grad drehen |
Matrix B | Um den Faktor 2 in x-Richtung skalieren |
Matrix C | Drei Einheiten in y-Richtung verschieben |
Wenn wir mit dem Punkt (2, 1) - dargestellt durch die Matrix [2 1 1] - beginnen und mit A multiplizieren, dann B, dann C, wird 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 gemeinsam multiplizieren, um eine einzelne 3×3-Matrix zu erhalten, die die gesamte zusammengesetzte Transformation speichert. 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:
Die Tatsache, dass die Matrix einer zusammengesetzten Transformation durch Multiplizieren der einzelnen Transformationsmatrizen gebildet werden kann, bedeutet, dass jede Sequenz affiner Transformationen in einem einzelnen Matrix-Objekt gespeichert werden kann.
Achtung
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 Klasse Matrix bietet mehrere Methoden zur Erstellung einer zusammengesetzten Transformation: Multiply, Rotate, RotateAt, Scale, Shear und 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
Matrix() |
Initialisiert eine neue Instanz der Matrix-Klasse als Identitätsmatrix. |
Matrix(Matrix3x2) |
Erstellt eine Matrix unter Verwendung des angegebenen |
Matrix(Rectangle, Point[]) |
Initialisiert eine neue Instanz der Matrix-Klasse für die geometrische Transformation, die durch das angegebene Rechteck und Punktearray definiert ist. |
Matrix(RectangleF, PointF[]) |
Initialisiert eine neue Instanz der Matrix-Klasse für die geometrische Transformation, die durch das angegebene Rechteck und Punktearray definiert ist. |
Matrix(Single, Single, Single, Single, Single, Single) |
Initialisiert eine neue Instanz der Matrix-Klasse mit den angegebenen Elementen. |
Eigenschaften
Elements |
Ruft ein Array von Gleitkommawerten ab, das die Elemente dieser Matrix darstellt. |
IsIdentity |
Ruft einen Wert ab, der angibt, ob es sich bei Matrix um die Identitätsmatrix handelt. |
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 Wert der Verschiebung in x-Richtung (der dx-Wert bzw. das Element in der dritten Zeile und ersten Spalte) dieser Matrix ab. |
OffsetY |
Ruft den Wert der Verschiebung in y-Richtung (den dy-Wert bzw. das Element in der dritten Zeile und zweiten Spalte) der Matrix ab. |
Methoden
Clone() |
Erstellt eine genaue Kopie von dieser Matrix. |
CreateObjRef(Type) |
Erstellt ein Objekt mit allen relevanten Informationen, die zum Generieren eines Proxys für die Kommunikation mit einem Remoteobjekt erforderlich sind. (Geerbt von MarshalByRefObject) |
Dispose() |
Gibt alle von dieser Matrix verwendeten Ressourcen frei. |
Equals(Object) |
Überprüft, ob das angegebene Objekt eine Matrix und mit dieser Matrix identisch ist. |
Finalize() |
Gibt einem Objekt Gelegenheit zu dem Versuch, Ressourcen freizugeben und andere Bereinigungen durchzuführen, bevor es von der Garbage Collection freigegeben wird. |
GetHashCode() |
Gibt einen Hashcode zurück. |
GetLifetimeService() |
Veraltet.
Ruft das aktuelle Lebensdauerdienstobjekt ab, das die Lebensdauerrichtlinien für diese Instanz steuert. (Geerbt von MarshalByRefObject) |
GetType() |
Ruft den Type der aktuellen Instanz ab. (Geerbt von Object) |
InitializeLifetimeService() |
Veraltet.
Ruft ein Lebensdauerdienstobjekt zur Steuerung der Lebensdauerrichtlinie für diese Instanz ab. (Geerbt von MarshalByRefObject) |
Invert() |
Invertiert diese Matrix, sofern sie invertierbar ist. |
MemberwiseClone() |
Erstellt eine flache Kopie des aktuellen Object. (Geerbt von Object) |
MemberwiseClone(Boolean) |
Erstellt eine flache Kopie des aktuellen MarshalByRefObject-Objekts. (Geerbt von MarshalByRefObject) |
Multiply(Matrix) |
Multipliziert diese Matrix mit der im |
Multiply(Matrix, MatrixOrder) |
Multipliziert diese Matrix mit der im |
Reset() |
Setzt diese Matrix zurück, sodass sie die Elemente der Identitätsmatrix enthält. |
Rotate(Single) |
Stellt dieser Matrix eine Drehung im Uhrzeigersinn um den Ursprung mit dem angegebenen Drehwinkel voran. |
Rotate(Single, MatrixOrder) |
Weist dieser |
RotateAt(Single, PointF) |
Weist dieser Matrix eine Drehung im Uhrzeigersinn um den im |
RotateAt(Single, PointF, MatrixOrder) |
Weist dieser Matrix eine Drehung im Uhrzeigersinn um den angegebenen Punkt in der angegebenen Reihenfolge zu. |
Scale(Single, Single) |
Weist den angegebenen Skalierungsvektor dieser Matrix zu, wobei der Skalierungsvektor vorangestellt wird. |
Scale(Single, Single, MatrixOrder) |
Weist den angegebenen Skalierungsvektor ( |
Shear(Single, Single) |
Weist den angegebenen Scherungsvektor der Matrix zu, wobei die Scherungstransformation vorangestellt wird. |
Shear(Single, Single, MatrixOrder) |
Weist den angegebenen Scherungsvektor dieser Matrix in der angegebenen Reihenfolge zu. |
ToString() |
Gibt eine Zeichenfolge zurück, die das aktuelle Objekt darstellt. (Geerbt von Object) |
TransformPoints(Point[]) |
Weist die von dieser Matrix dargestellte geometrische Transformation einem angegebenen Punktearray zu. |
TransformPoints(PointF[]) |
Weist die von dieser Matrix dargestellte geometrische Transformation einem angegebenen Punktearray zu. |
TransformVectors(Point[]) |
Weist dem angegebenen Punktearray ausschließlich die Skalierungs- und Drehungskomponenten dieser Matrix zu. |
TransformVectors(PointF[]) |
Multipliziert jeden Vektor in einem Array mit der Matrix. Die zu verschiebenden Elemente dieser Matrix (dritte Zeile) werden ignoriert. |
Translate(Single, Single) |
Weist den angegebenen Verschiebungsvektor ( |
Translate(Single, Single, MatrixOrder) |
Weist den angegebenen Verschiebungsvektor dieser Matrix in der angegebenen Reihenfolge zu. |
VectorTransformPoints(Point[]) |
Multipliziert jeden Vektor in einem Array mit der Matrix. Die zu verschiebenden Elemente dieser Matrix (dritte Zeile) werden ignoriert. |