Condividi tramite


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

Matrice

Rappresentazione tramite matrici delle trasformazioni

Point

Metodi TransformPoints

Metodi TransformVectors

Trasformazioni