Annexe : transformations de matrice

Cette rubrique fournit une vue d’ensemble mathématique des transformations de matrice pour les graphiques 2D. Toutefois, vous n’avez pas besoin de connaître les mathématiques de matrice pour pouvoir utiliser les transformations dans Direct2D. Lisez cette rubrique si vous êtes intéressé par les mathématiques. dans le cas contraire, n’hésitez pas à ignorer cette rubrique.

Présentation des matrices

Une matrice est un tableau rectangulaire de nombres réels. L' ordre de la matrice est le nombre de lignes et de colonnes. Par exemple, si la matrice contient 3 lignes et 2 colonnes, la commande est 3 × 2. Les matrices sont généralement affichées avec les éléments de matrice placés entre crochets :

matrice 3 x 2.

Notation : une matrice est désignée par une lettre majuscule. Les éléments sont désignés par des lettres minuscules. Les indices indiquent le numéro de ligne et de colonne d’un élément. Par exemple, un IJ est l’élément situé à la IE ligne et à la colonne j’th de la matrice a.

Le diagramme suivant montre une matrice i × j, avec les éléments individuels dans chaque cellule de la matrice.

matrice avec i lignes et j colonnes.

Opérations de matrice

Cette section décrit les opérations de base définies sur les matrices.

En outre. La somme A + B de deux matrices est obtenue en ajoutant les éléments correspondants de A et B :

A + b = \[ a *IJ* \] + \[ B *IJ* \] = \[ a *IJ* + b *IJ*\]

Multiplication scalaire. Cette opération multiplie une matrice par un nombre réel. Étant donné un nombre réel k, le produit scalaire Ka est obtenu en multipliant chaque élément d’un par k.

Ka = k \[ a *IJ* \] = \[ k × a *IJ*\]

Multiplication de matrice. À partir de deux matrices A et B avec l’ordre (m × n) et (n × p), le produit C = A × B est une matrice avec l’ordre (m × p), définie comme suit :

Affiche une formule pour la multiplication de matrice.

ou, de façon équivalente :

c *IJ* = a *i* 1 x B1 *j* + a *i* 2 x B2 *j* +... + a *dans* + b *NJ*

Autrement dit, pour calculer chaque élément c IJ, procédez comme suit :

  1. Prenez la IE ligne de et la colonne j’th de B.
  2. Multipliez chaque paire d’éléments dans la ligne et la colonne : la première entrée de ligne par la première entrée de colonne, la deuxième entrée de ligne par la deuxième entrée de colonne, etc.
  3. Additionner le résultat.

Voici un exemple de multiplication d’une matrice (2 × 2) par une matrice (2 × 3).

multiplication de matrice.

La multiplication de matrice n’est pas commutative. Autrement dit, A × B ≠ B × A. En outre, à partir de la définition, il s’ensuit que toutes les paires de matrices ne peuvent pas être multipliées. Le nombre de colonnes dans la matrice de gauche doit être égal au nombre de lignes dans la matrice de droite. Sinon, l’opérateur × n’est pas défini.

Identifiez la matrice. Une matrice d’identité, désignée I, est une matrice carrée définie comme suit :

I *IJ* = 1 si *i* = *j*, ou 0 dans le cas contraire.

En d’autres termes, une matrice d’identité contient 1 pour chaque élément où le numéro de ligne est égal au numéro de colonne et zéro pour tous les autres éléments. Par exemple, voici la matrice d’identité 3 × 3.

matrice d’identité.

Les égalités suivantes sont conservées pour n’importe quelle matrice M.

M x I = M I x M = M

Transformations affines

Une transformation affine est une opération mathématique qui mappe un espace de coordonnées à un autre. En d’autres termes, il mappe un ensemble de points à un autre ensemble de points. Les transformations affines ont des fonctionnalités qui les rendent utiles dans les graphiques informatiques.

  • Les transformations affines préservent la colinéarité. Si trois points ou plus se trouvent sur une ligne, ils forment toujours une ligne après la transformation. Les lignes droites restent droits.
  • La composition de deux transformations affines est une transformation affine.

Les transformations affines pour l’espace 2D se présentent sous la forme suivante.

Affiche une transformation affine pour l’espace 2D.

Si vous appliquez la définition de la multiplication de matrice donnée précédemment, vous pouvez indiquer que le produit de deux transformations affinées est une autre transformation affine. Pour transformer un point 2D à l’aide d’une transformation affine, le point est représenté sous la forme d’une matrice 1 × 3.

P = \| x y 1 \|

Les deux premiers éléments contiennent les coordonnées x et y du point. Le 1 est placé dans le troisième élément pour que les opérations mathématiques fonctionnent correctement. Pour appliquer la transformation, multipliez les deux matrices comme suit.

P' = P × M

Cela s’étend à ce qui suit.

transformation affine.

where

x' = ax + CY + e y' = BX + dy + f

Pour récupérer le point transformé, prenez les deux premiers éléments de la matrice P.

p = (x', y') = (ax + CY + e, BX + dy + f)

Notes

Une matrice 1 × n est appelée un vecteur de ligne. Direct2D et Direct3D utilisent tous deux des vecteurs de ligne pour représenter des points dans l’espace 2D ou 3D. Vous pouvez obtenir un résultat équivalent en utilisant un vecteur de colonne (n × 1) et en transposant la matrice de transformation. La plupart des textes graphiques utilisent le format de vecteur de colonne. Cette rubrique présente le format de vecteur de ligne pour la cohérence avec Direct2D et Direct3D.

Les différentes sections suivantes dérivent les transformations de base.

Transformation de traduction

La matrice de transformation de traduction se présente sous la forme suivante.

transformation de traduction.

Le branchement d’un point P dans cette équation donne :

P' = (*x* + *DX*, *y* + *dy*)

qui correspond au point (x, y) traduit par DX sur l’axe des abscisses et dy sur l’axe des y.

diagramme qui affiche la traduction de deux points.

Mise à l’échelle de la transformation

La matrice de transformation de mise à l’échelle se présente sous la forme suivante.

mise à l’échelle de la transformation.

Le branchement d’un point P dans cette équation donne :

P' = (*x* ∙ *DX*, *y* ∙ *dy*)

qui correspond au point (x, y) mis à l’échelle par DX et dy.

diagramme qui affiche la mise à l’échelle de deux points.

Rotation autour de l’origine

La matrice pour faire pivoter un point autour de l’origine se présente sous la forme suivante.

Affiche une formule pour une transformation de rotation.

Le point transformé est le suivant :

P' = (*x* CosΘ – ysinΘ, *x* sinΘ + *y* cosΘ)

Preuve. Pour montrer que P’représente une rotation, examinez le diagramme suivant.

diagramme qui affiche la rotation autour de l’origine.

Soit :

P = (x, y)

Point d’origine à transformer.

Φ

L’angle formé par la ligne (0,0) à P.

Alors

Angle selon lequel pivoter (x, y) autour de l’origine.

P' = (x', y')

Point transformé.

R

Longueur de la ligne (0,0) à P. Également le rayon du cercle de rotation.

Notes

Ce diagramme utilise le système de coordonnées standard utilisé dans Geometry, où l’axe des y positif pointe vers le haut. Direct2D utilise le système de coordonnées Windows, où l’axe des y positif pointe vers le dessous.

L’angle entre l’axe des abscisses et la ligne (0,0) à P est Φ + Θ. Les identités suivantes sont conservées :

x = R cosΦ o = R sinΦ x' = R cos (Φ + Θ) y' = R Sin (Φ + Θ)

À présent, résolvez les x et y en termes de Θ. Par les formules d’addition trigonométrique :

x' = R (cosΦcosΘ – sinΦsinΘ) = RcosΦcosΘ – RsinΦsinΘ y' = R (sinΦcosΘ + cosΦsinΘ) = RsinΦcosΘ + RcosΦsinΘ

En remplaçant, nous obtenons :

x' = xcosΘ – ysinΘ y' = xsinΘ + ycosΘ

qui correspond au point transformé P’indiqué plus haut.

Rotation autour d’un point arbitraire

Pour faire pivoter autour d’un point (x, y) autre que l’origine, la matrice suivante est utilisée.

transformation de rotation.

Vous pouvez dériver cette matrice en utilisant le point (x, y) comme origine.

diagramme qui montre une rotation autour d’un point.

Let (x1, Y1) est le point qui résulte de la rotation du point (x0, Y0) autour du point (x, y). Nous pouvons dériver x1 comme suit.

x1 = (x0 – x) cosΘ – (Y0 – y) sinΘ + x x1 = x0cosΘ – y0sinΘ + \[ (1 – cosΘ) + ysinΘ \]

À présent, rebranchez cette équation à la matrice de transformation, en utilisant la formule x1 = aX0 + CY0 + e de la version antérieure. Utilisez la même procédure pour dériver Y1.

Transformation d’inclinaison

La transformation d’inclinaison est définie par quatre paramètres :

  • Θ : la valeur de l’inclinaison le long de l’axe x, mesurée en tant qu’angle à partir de l’axe y.
  • Φ : la valeur de l’inclinaison le long de l’axe y, mesurée en tant qu’angle à partir de l’axe x.
  • (PX, py) : coordonnées x et y du point sur lequel l’inclinaison est exécutée.

La transformation d’inclinaison utilise la matrice suivante.

incliner la transformation.

Le point transformé est le suivant :

P' = (*x* + *y* tanΘ – *py* tanΘ, *y* + *x* tanΦ) – *py* tanΦ

ou équivalent :

P' = (*x* + (*y* – *py*) tanΘ, *y* + (*x* - *PX*) tanΦ)

Pour voir comment cette transformation fonctionne, considérez chaque composant individuellement. Le paramètre Θ déplace chaque point de la direction x d’une quantité égale à tanΘ. Le diagramme suivant montre la relation entre Θ et l’inclinaison de l’axe x.

Diagramme qui affiche le décalage le long de l’axe x.

Voici la même inclinaison appliquée à un rectangle :

Diagramme qui affiche le décalage le long de l’axe x lorsqu’il est appliqué à un rectangle.

Le paramètre Φ a le même effet, mais le long de l’axe y :

Diagramme qui affiche l’inclinaison le long de l’axe y.

Le diagramme suivant montre l’inclinaison de l’axe y appliquée à un rectangle.

Diagramme qui affiche l’inclinaison le long de l’axe y lorsqu’il est appliqué à un rectangle.

Enfin, les paramètres PX et py déplacent le point central de l’inclinaison le long des axes x et y.

Représentation des transformations dans Direct2D

Toutes les transformations Direct2D sont des transformations affines. Direct2D ne prend pas en charge les transformations non affines. Les transformations sont représentées par la structure _ _ matrice _ F de la matrice d2d1 . Cette structure définit une matrice 3 × 2. Étant donné que la troisième colonne d’une transformation affine est toujours la même ( [ 0, 0, 1 ] ) et parce que Direct2D ne prend pas en charge les transformations non affines, il n’est pas nécessaire de spécifier la totalité de la matrice 3 × 3. En interne, Direct2D utilise 3 × 3 matrices pour calculer les transformations.

Les membres de la _ matrice d2d1 _ matrice _ F sont nommés en fonction de leur position d’index : le membre _ 11 est l’élément (1, 1), le membre _ 12 est l’élément (1, 2), et ainsi de suite. Bien que vous puissiez initialiser les membres de la structure directement, il est recommandé d’utiliser la classe d2d1 :: Matrix3x2F . Cette classe hérite de d2d1 _ Matrix _ matrice _ F et fournit des méthodes d’assistance pour créer l’une des transformations affines de base. La classe définit également l' opérateur * () pour composer deux ou plusieurs transformations, comme décrit dans application de transformations dans Direct2D.

Suivant

Module 4. Entrée utilisateur