Metodo Matrix::TransformVectors(Point*,INT) (gdiplusmatrix.h)
Il metodo Matrix::TransformVectors moltiplica ogni vettore in una matrice in base a questa matrice. Gli elementi di traslazione di questa matrice (terza riga) vengono ignorati. Ogni vettore viene considerato come matrice di righe. La moltiplicazione viene eseguita con la matrice di riga a sinistra e questa matrice a destra.
Sintassi
Status TransformVectors(
[in, out] Point *pts,
[in] INT count
);
Parametri
[in, out] pts
Tipo: Punto*
Puntatore a una matrice di oggetti Point che, in input, contiene i vettori da trasformare e, nell'output, riceve i vettori trasformati. Ogni vettore della matrice viene trasformato (moltiplicato in base a questa matrice) e aggiornato con il risultato della trasformazione.
[in] count
Tipo: INT
Facoltativa. Intero che specifica il numero di vettori da trasformare. Il valore predefinito è 1.
Valore restituito
Tipo: Stato
Se il metodo ha esito positivo, restituisce Ok, ovvero un elemento dell'enumerazione Status .
Se il metodo ha esito negativo, restituisce uno degli altri elementi dell'enumerazione Status .
Commenti
Mentre un punto rappresenta la posizione, un vettore rappresenta un'entità (ad esempio, velocità o accelerazione) che ha una direzione e una grandezza. Di conseguenza, gli endpoint di un segmento di linea sono punti, ma la differenza è un vettore, ovvero la lunghezza e la direzione del segmento di linea.
I vettori sono simili ai punti in molti modi. Come i punti, sono rappresentati da coordinate x e y, quindi GDI+ usa le stesse classi (Point e PointF) per rappresentare i vettori che utilizza per rappresentare i punti. La differenza sottile tra vettori e punti è il modo in cui sono influenzati dalle trasformazioni. Nel mondo fisico lo spostamento dell'origine del sistema di coordinate modifica le coordinate di tutti i punti di posizione, ma non modificherà alcun vettore di velocità. I vettori possono essere ridimensionati, ruotati, sheared o capovolti, ma non tradotti (spostati). Pertanto, quando viene applicata una trasformazione affine a un vettore, il componente di traduzione (l'ultima riga della matrice) viene ignorata.
Esempio
Nell'esempio seguente viene creato un vettore e un punto. La punta del vettore e il punto si trovano nella stessa posizione: (100, 50). Il codice crea un oggetto Matrix e inizializza gli elementi in modo che rappresenti una rotazione in senso orario seguita da una traduzione di 100 unità a destra. Il codice chiama il metodo Matrix::TransformPoints della matrice per trasformare il punto e chiama il metodo Matrix:: TransformVectors della matrice per trasformare il vettore. L'intera trasformazione (rotazione seguita dalla traduzione) viene eseguita sul punto, ma solo la parte di rotazione della trasformazione viene eseguita sul vettore. Gli elementi della matrice che rappresentano la traduzione vengono ignorati dal metodo Matrix::TransformVectors .
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);
}
Requisiti
Client minimo supportato | Windows XP, Windows 2000 Professional [solo app desktop] |
Server minimo supportato | Windows 2000 Server [solo app desktop] |
Piattaforma di destinazione | Windows |
Intestazione | gdiplusmatrix.h (include Gdiplus.h) |
Libreria | Gdiplus.lib |
DLL | Gdiplus.dll |
Vedi anche
Trasformazioni globali e locali