Partager via


Matrix::TransformVectors(Point*,INT) , méthode (gdiplusmatrix.h)

La méthode Matrix::TransformVectors multiplie chaque vecteur d’un tableau par cette matrice. Les éléments de translation de cette matrice (troisième ligne) sont ignorés. Chaque vecteur est traité comme une matrice de lignes. La multiplication est effectuée avec la matrice de lignes à gauche et cette matrice à droite.

Syntaxe

Status TransformVectors(
  [in, out] Point *pts,
  [in]      INT   count
);

Paramètres

[in, out] pts

Type : Point*

Pointeur vers un tableau d’objets Point qui, en entrée, contient les vecteurs à transformer et, en sortie, reçoit les vecteurs transformés. Chaque vecteur du tableau est transformé (multiplié par cette matrice) et mis à jour avec le résultat de la transformation.

[in] count

Type : INT

Optionnel. Entier qui spécifie le nombre de vecteurs à transformer. La valeur par défaut est 1.

Valeur retournée

Type : État

Si la méthode réussit, elle retourne Ok, qui est un élément de l’énumération Status .

Si la méthode échoue, elle retourne l’un des autres éléments de l’énumération Status .

Notes

Alors qu’un point représente la position, un vecteur représente une entité (par exemple, vitesse ou accélération) qui a une direction et une magnitude. Ainsi, les points de terminaison d’un segment de ligne sont des points, mais leur différence est un vecteur: la longueur et la direction de ce segment de ligne.

Les vecteurs sont similaires aux points à bien des égards. Comme les points, ils sont représentés par des coordonnées x et y. Par conséquent, GDI+ utilise les mêmes classes (Point et PointF) pour représenter les vecteurs que pour représenter des points. La différence subtile entre les vecteurs et les points est la façon dont ils sont affectés par les transformations. Dans le monde physique, le déplacement de l’origine du système de coordonnées modifie les coordonnées de tous les points de position, mais il ne modifie aucun vecteur de vélocité. Les vecteurs peuvent être mis à l’échelle, pivotés, ciselé ou retournés, mais pas traduits (déplacés). Ainsi, lorsqu’une transformation affine est appliquée à un vecteur, le composant de traduction (la dernière ligne de la matrice) est ignoré.

Exemples

L’exemple suivant crée un vecteur et un point. La pointe du vecteur et le point se trouvent au même emplacement : (100, 50). Le code crée un objet Matrix et initialise ses éléments afin qu’il représente une rotation dans le sens des aiguilles d’une montre suivie d’une traduction de 100 unités à droite. Le code appelle la méthode Matrix::TransformPoints de la matrice pour transformer le point et appelle la méthode Matrix::TransformVectors de la matrice pour transformer le vecteur. La transformation entière (rotation suivie d’une traduction) est effectuée sur le point, mais seule la partie de rotation de la transformation est effectuée sur le vecteur. Les éléments de la matrice qui représentent la traduction sont ignorés par la méthode 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); 
}

Configuration requise

   
Client minimal pris en charge Windows XP, Windows 2000 Professionnel [applications de bureau uniquement]
Serveur minimal pris en charge Windows 2000 Server [applications de bureau uniquement]
Plateforme cible Windows
En-tête gdiplusmatrix.h (include Gdiplus.h)
Bibliothèque Gdiplus.lib
DLL Gdiplus.dll

Voir aussi

Transformations globales et locales

Matrice

Représentation matricielle des transformations

Point

TransformPoints, méthodes

TransformVectors, méthodes

Transformations