Matrix::TransformVectors(Point*,INT)-Methode (gdiplusmatrix.h)
Die Matrix::TransformVectors-Methode multipliziert jeden Vektor in einem Array mit dieser Matrix. Die zu verschiebenden Elemente dieser Matrix (dritte Zeile) werden ignoriert. Jeder Vektor wird als Zeilenmatrix behandelt. Die Multiplikation wird mit der Zeilenmatrix links und mit dieser Matrix auf der rechten Seite ausgeführt.
Syntax
Status TransformVectors(
[in, out] Point *pts,
[in] INT count
);
Parameter
[in, out] pts
Typ: Punkt*
Zeiger auf ein Array von Point-Objekten , das bei der Eingabe die zu transformierenden Vektoren enthält und bei der Ausgabe die transformierten Vektoren empfängt. Jeder Vektor im Array wird transformiert (multipliziert mit dieser Matrix) und mit dem Ergebnis der Transformation aktualisiert.
[in] count
Typ: INT
Optional. Ganzzahl, die die Anzahl der zu transformierenden Vektoren angibt. Der Standardwert ist 1.
Rückgabewert
Typ: Status
Wenn die Methode erfolgreich ist, gibt sie OK zurück, ein Element der Status-Enumeration .
Wenn die Methode fehlschlägt, gibt sie eines der anderen Elemente der Status-Enumeration zurück.
Hinweise
Während ein Punkt die Position darstellt, stellt ein Vektor eine Entität (z. B. Geschwindigkeit oder Beschleunigung) dar, die eine Richtung und eine Größe aufweist. Daher sind die Endpunkte eines Liniensegments Punkte, aber ihre Differenz ist ein Vektor – die Länge und Richtung dieses Liniensegments.
Vektoren ähneln Punkten in vielerlei Hinsicht. Wie Punkte werden sie durch x- und y-Koordinaten dargestellt, sodass GDI+ die gleichen Klassen (Point und PointF) verwendet, um Vektoren darzustellen, die zum Darstellen von Punkten verwendet werden. Der subtile Unterschied zwischen Vektoren und Punkten ist die Art und Weise, wie sie von Transformationen beeinflusst werden. In der physischen Welt ändert das Verschieben des Ursprungs des Koordinatensystems die Koordinaten aller Positionspunkte, aber es werden keine Geschwindigkeitsvektoren geändert. Vektoren können skaliert, gedreht, geschoren oder gedreht, aber nicht übersetzt (verschoben) werden. Wenn also eine affine Transformation auf einen Vektor angewendet wird, wird die Übersetzungskomponente (die letzte Zeile der Matrix) ignoriert.
Beispiele
Im folgenden Beispiel werden ein Vektor und ein Punkt erstellt. Die Spitze des Vektors und der Punkt befinden sich an derselben Position: (100, 50). Der Code erstellt ein Matrix-Objekt und initialisiert seine Elemente, sodass es eine Drehung im Uhrzeigersinn darstellt, gefolgt von einer Übersetzung von 100 Einheiten nach rechts. Der Code ruft die Matrix::TransformPoints-Methode der Matrix auf, um den Punkt zu transformieren, und ruft die Matrix::TransformVectors-Methode der Matrix auf, um den Vektor zu transformieren. Die gesamte Transformation (Drehung gefolgt von Übersetzung) wird auf dem Punkt ausgeführt, aber nur der Rotationsteil der Transformation wird auf dem Vektor ausgeführt. Die Elemente der Matrix, die die Übersetzung darstellen, werden von der Matrix::TransformVectors-Methode ignoriert.
VOID Example_TransVectors(HDC hdc)
{
Graphics graphics(hdc);
Pen pen(Color(255, 0, 0, 255), 7);
pen.SetEndCap(LineCapArrowAnchor);
SolidBrush brush(Color(255, 0, 0, 255));
// A point and a vector, same representation but different behavior
Point point(100, 50);
Point vector(100, 50);
// Draw the original point and vector in blue.
graphics.FillEllipse(&brush, point.X - 5, point.Y - 5, 10, 10);
graphics.DrawLine(&pen, Point(0, 0), vector);
// Transform.
Matrix matrix(0.8f, 0.6f, -0.6f, 0.8f, 100.0f, 0.0f);
matrix.TransformPoints(&point);
matrix.TransformVectors(&vector);
// Draw the transformed point and vector in red.
pen.SetColor(Color(255, 255, 0, 0));
brush.SetColor(Color(255, 255, 0, 0));
graphics.FillEllipse(&brush, point.X - 5, point.Y - 5, 10, 10);
graphics.DrawLine(&pen, Point(0, 0), vector);
}
Anforderungen
Unterstützte Mindestversion (Client) | Windows XP, Windows 2000 Professional [nur Desktop-Apps] |
Unterstützte Mindestversion (Server) | Windows 2000 Server [nur Desktop-Apps] |
Zielplattform | Windows |
Kopfzeile | gdiplusmatrix.h (include Gdiplus.h) |
Bibliothek | Gdiplus.lib |
DLL | Gdiplus.dll |
Weitere Informationen
Globale und lokale Transformationen