matrixmore.tex

<< Matrices et transformations linéaires

Sommaire

Systèmes de coordonnées polaires >>

Chapter 6

Complément sur les matrices

L’esprit de l’homme étendu à une nouvelle idée
ne revient jamais à ses dimensions originales.

— Oliver Wendell Holmes Jr. (1841–1935)

Le chapitre 4 a présenté quelques-unes des propriétés et opérations les plus importantes des matrices et a discuté de la façon dont les matrices peuvent être utilisées pour exprimer des transformations géométriques en général. Le chapitre 5 a considéré les matrices et les transformations géométriques en détail. Ce chapitre complète notre couverture des matrices en abordant quelques opérations matricielles supplémentaires intéressantes et utiles.

6.1Déterminant d’une matrice

Pour les matrices carrées, il existe un scalaire spécial appelé le déterminant de la matrice. Le déterminant a de nombreuses propriétés utiles en algèbre linéaire, et il a aussi des interprétations géométriques intéressantes.

Comme c’est notre habitude, nous discutons d’abord de quelques mathématiques, puis nous faisons des interprétations géométriques. La section 6.1.1 introduit la notation pour les déterminants et donne les règles d’algèbre linéaire pour calculer le déterminant d’une matrice 2×22 \times 2 ou 3×33 \times 3 . La section 6.1.2 traite des mineurs et des cofacteurs. Puis, la section 6.1.3 montre comment calculer le déterminant d’une matrice n×nn \times n arbitraire, en utilisant les mineurs et les cofacteurs. Enfin, la section 6.1.4 interprète le déterminant d’un point de vue géométrique.

6.1.1 Déterminants des matrices 2×22 \times 2 et 3×33 \times 3

Le déterminant d’une matrice carrée 𝐌\mathbf{M} est noté |𝐌|\left| \mathbf{M} \right| ou, dans certains autres livres, « det𝐌{det\ }\mathbf{M} ». Le déterminant d’une matrice non carrée n’est pas défini. Cette section montre comment calculer les déterminants des matrices 2×22 \times 2 et 3×33 \times 3 . Le déterminant d’une matrice n×nn \times n générale, qui est assez complexe, est discuté dans la section 6.1.3

Le déterminant d’une matrice 2×22 \times 2 est donné par

Déterminant d’une matrice 2×22 \times 2

|𝐌|=|m11m12m21m22|=m11m22m12m21.\begin{matrix} {\left| \mathbf{M} \right| = \left| \begin{matrix} m_{11} & m_{12} \\ m_{21} & m_{22} \\ \end{matrix} \right| = m_{11}m_{22} - m_{12}m_{21}.} \\ \end{matrix}

Notez que lorsque nous écrivons le déterminant d’une matrice, nous remplaçons les crochets par des barres verticales.

L’équation (6.1) peut être mémorisée plus facilement avec le diagramme suivant. Il suffit de multiplier les entrées le long de la diagonale et de la contre-diagonale, puis de soustraire le terme de la contre-diagonale du terme de la diagonale.

image

Quelques exemples aident à clarifier ce calcul simple :

|2112|=(2)(2)(1)(1)=4+1=5;|3425|=(3)(5)(4)(2)=158=23;|abcd|=adbc.\begin{matrix} \left| \begin{matrix} 2 & 1 \\ {- 1} & 2 \\ \end{matrix} \right| & {= (2)(2) - (1)( - 1) = 4 + 1 = 5;} \\ \left| \begin{matrix} {- 3} & 4 \\ 2 & 5 \\ \end{matrix} \right| & {= ( - 3)(5) - (4)(2) = - 15 - 8 = - 23;} \\ \left| \begin{matrix} a & b \\ c & d \\ \end{matrix} \right| & {= ad - bc.} \\ \end{matrix}

Le déterminant d’une matrice 3×33 \times 3 est donné par

Déterminant d’une matrice 3×33 \times 3

|m11m12m13m21m22m23m31m32m33|=m11m22m33+m12m23m31+m13m21m32m13m22m31m12m21m33m11m23m32=m11(m22m33m23m32)+m12(m23m31m21m33)+m13(m21m32m22m31).\begin{matrix} {\left| \begin{matrix} m_{11} & m_{12} & m_{13} \\ m_{21} & m_{22} & m_{23} \\ m_{31} & m_{32} & m_{33} \\ \end{matrix} \right|\quad\quad\quad\quad} & \\ = & \begin{matrix} {m_{11}m_{22}m_{33} + m_{12}m_{23}m_{31} + m_{13}m_{21}m_{32}} \\ {- m_{13}m_{22}m_{31} - m_{12}m_{21}m_{33} - m_{11}m_{23}m_{32}} \\ \end{matrix} \\ = & {\ \ m_{11}(m_{22}m_{33} - m_{23}m_{32})} \\ & {+ m_{12}(m_{23}m_{31} - m_{21}m_{33})} \\ & {+ m_{13}(m_{21}m_{32} - m_{22}m_{31}).} \\ \end{matrix}

Un diagramme similaire peut être utilisé pour mémoriser l’équation (6.2). Nous écrivons deux copies de la matrice 𝐌\mathbf{M} côte à côte et multiplions les entrées le long des diagonales et contre-diagonales, en additionnant les termes des diagonales et en soustrayant les termes des contre-diagonales.

image

Par exemple,

|433022141|=42124+32101+30421=428+320+302=46+32+32=24+6+6=24.\begin{matrix} \left| \begin{matrix} {- 4} & {- 3} & 3 \\ 0 & 2 & {- 2} \\ 1 & 4 & {- 1} \\ \end{matrix} \right| & {= \begin{matrix} & {- 4} & 2 & {- 1} & {- 2} & 4 \\ + & {- 3} & {- 2} & 1 & 0 & {- 1} \\ + & 3 & 0 & 4 & 2 & 1 \\ \end{matrix}} \\ & {= \begin{matrix} & {- 4} & {- 2} & {- 8} \\ + & {- 3} & {- 2} & 0 \\ + & 3 & 0 & 2 \\ \end{matrix} = \begin{matrix} & {- 4} & 6 \\ + & {- 3} & {- 2} \\ + & 3 & {- 2} \\ \end{matrix} = \begin{matrix} & {- 24} \\ + & 6 \\ + & {- 6} \\ \end{matrix}} \\ & {= - 24.} \\ \end{matrix}

Si nous interprétons les lignes d’une matrice 3×33 \times 3 comme trois vecteurs, alors le déterminant de la matrice est équivalent au « produit mixte » des trois vecteurs :

Déterminant 3×33 \times 3 vs. produit mixte de vecteurs 3D

|axayazbxbybzcxcycz|=(aybzazby)cx+(azbxaxbz)cy+(axbyaybx)cz=(𝐚×𝐛)𝐜.\left| \begin{matrix} a_{x} & a_{y} & a_{z} \\ b_{x} & b_{y} & b_{z} \\ c_{x} & c_{y} & c_{z} \\ \end{matrix} \right| = \begin{array}{l} {\left( a_{y}b_{z} - a_{z}b_{y} \right)c_{x}} \\ {+ \left( a_{z}b_{x} - a_{x}b_{z} \right)c_{y}} \\ {+ \left( a_{x}b_{y} - a_{y}b_{x} \right)c_{z}} \\ \end{array} = \left( \mathbf{a} \times \mathbf{b} \right) \cdot \mathbf{c}.

6.1.2Mineurs et cofacteurs

Avant d’examiner les déterminants dans le cas général, nous devons introduire d’autres constructions : les mineurs et les cofacteurs.

Supposons que 𝐌\mathbf{M} soit une matrice avec rr lignes et cc colonnes. Considérons la matrice obtenue en supprimant la ligne ii et la colonne jj de 𝐌\mathbf{M} . Cette matrice aura évidemment r1r - 1 lignes et c1c - 1 colonnes. Le déterminant de cette sous-matrice, noté M{ij}M^{\{ ij\}} , est appelé un mineur de 𝐌\mathbf{M} . Par exemple, le mineur M{12}M^{\{ 12\}} est le déterminant de la matrice 2×22 \times 2 résultant de la suppression de la ligne 1 et de la colonne 2 de la matrice 3×33 \times 3 𝐌\mathbf{M} :

Un mineur d’une matrice 3×33 \times 3

𝐌=[433022141]M{12}=|0211|=2.\mathbf{M} = \begin{bmatrix} {- 4} & {- 3} & 3 \\ 0 & 2 & {- 2} \\ 1 & 4 & {- 1} \\ \end{bmatrix}\ \ \ \ \Longrightarrow\ \ \ \ M^{\{ 12\}} = \left| \begin{matrix} 0 & {- 2} \\ 1 & {- 1} \\ \end{matrix} \right| = 2.

Le cofacteur d’une matrice carrée 𝐌\mathbf{M} à une ligne et une colonne données est identique au mineur correspondant, mais avec les mineurs alternés négativés :

Cofacteur d’une matrice

C{ij}=(1)i+jM{ij}.\begin{matrix} {C^{\{ ij\}} = ( - 1)^{i + j}M^{\{ ij\}}.} \\ \end{matrix}

Comme le montre l’équation (6.4), nous utilisons la notation C{ij}C^{\{ ij\}} pour désigner le cofacteur de 𝐌\mathbf{M} à la ligne ii , colonne jj . Le terme (1)(i+j)( - 1)^{(i + j)} a pour effet de négativer un cofacteur sur deux, selon un motif en damier :

[++++++++].\begin{bmatrix} + & - & + & - & \cdots \\ - & + & - & + & \cdots \\ + & - & + & - & \cdots \\ - & + & - & + & \cdots \\ \vdots & \vdots & \vdots & \vdots & \ddots \\ \end{bmatrix}.

Dans la section suivante, nous utilisons les mineurs et cofacteurs pour calculer les déterminants d’une dimension n×nn \times n arbitraire, et à nouveau dans la section 6.2 pour calculer l’inverse d’une matrice.

6.1.3Déterminants de matrices 𝐧×𝐧\mathbf{n} \times \mathbf{n} arbitraires

Plusieurs définitions équivalentes existent pour le déterminant d’une matrice de dimension n×nn \times n arbitraire. La définition que nous considérons ici exprime un déterminant en termes de ses cofacteurs. Cette définition est récursive, puisque les cofacteurs sont eux-mêmes des déterminants signés. D’abord, nous sélectionnons arbitrairement une ligne ou une colonne de la matrice. Ensuite, pour chaque élément de la ligne ou de la colonne, nous multiplions cet élément par le cofacteur correspondant. La somme de ces produits donne le déterminant de la matrice. Par exemple, en sélectionnant arbitrairement la ligne ii , le déterminant peut être calculé par

|𝐌|=j=1nmijC{ij}=j=1nmij(1)i+jM{ij}.\begin{matrix} {\left| \mathbf{M} \right| = \sum\limits_{j = 1}^{n}m_{ij}C^{\{ ij\}} = \sum\limits_{j = 1}^{n}m_{ij}( - 1)^{i + j}M^{\{ ij\}}.} \\ \end{matrix}

Calcul d’un déterminant 𝐧×𝐧\mathbf{n} \times \mathbf{n} par les cofacteurs de la ligne 𝐢\mathbf{i}

Il s’avère que peu importe la ligne ou la colonne que nous choisissons ; elles produisent toutes le même résultat.

Voyons un exemple. Nous réécrirons l’équation pour le déterminant 3×33 \times 3 en utilisant l’équation (6.5) :

Définition récursive du déterminant appliquée au cas 3×33 \times 3

|m11m12m13m21m22m23m31m32m33|=m11|m22m23m32m33|m12|m21m23m31m33|+m13|m21m22m31m32|.\begin{matrix} \begin{matrix} \left| \begin{matrix} m_{11} & m_{12} & m_{13} \\ m_{21} & m_{22} & m_{23} \\ m_{31} & m_{32} & m_{33} \\ \end{matrix} \right| & {= m_{11}\left| \begin{matrix} m_{22} & m_{23} \\ m_{32} & m_{33} \\ \end{matrix} \right| - m_{12}\left| \begin{matrix} m_{21} & m_{23} \\ m_{31} & m_{33} \\ \end{matrix} \right|} \\ & {\quad + m_{13}\left| \begin{matrix} m_{21} & m_{22} \\ m_{31} & m_{32} \\ \end{matrix} \right|.} \\ \end{matrix} \\ \end{matrix}

Maintenant, dérivons le déterminant de la matrice 4×44 \times 4 :

Définition récursive du déterminant appliquée au cas 4×44 \times 4

|m11m12m13m14m21m22m23m24m31m32m33m34m41m42m43m44|=m11|m22m23m24m32m33m34m42m43m44|m12|m21m23m24m31m33m34m41m43m44|+m13|m21m22m24m31m32m34m41m42m44|m14|m21m22m23m31m32m33m41m42m43|.\begin{matrix} {{\left| \begin{matrix} m_{11} & m_{12} & m_{13} & m_{14} \\ m_{21} & m_{22} & m_{23} & m_{24} \\ m_{31} & m_{32} & m_{33} & m_{34} \\ m_{41} & m_{42} & m_{43} & m_{44} \\ \end{matrix} \right| = m_{11}\left| \begin{matrix} m_{22} & m_{23} & m_{24} \\ m_{32} & m_{33} & m_{34} \\ m_{42} & m_{43} & m_{44} \\ \end{matrix} \right|}\quad\quad\quad\quad} & \\ & {- m_{12}\left| \begin{matrix} m_{21} & m_{23} & m_{24} \\ m_{31} & m_{33} & m_{34} \\ m_{41} & m_{43} & m_{44} \\ \end{matrix} \right| + m_{13}\left| \begin{matrix} m_{21} & m_{22} & m_{24} \\ m_{31} & m_{32} & m_{34} \\ m_{41} & m_{42} & m_{44} \\ \end{matrix} \right|} \\ & {- m_{14}\left| \begin{matrix} m_{21} & m_{22} & m_{23} \\ m_{31} & m_{32} & m_{33} \\ m_{41} & m_{42} & m_{43} \\ \end{matrix} \right|.} \\ \end{matrix}

En développant les cofacteurs, nous obtenons

Déterminant d’une matrice 4×44 \times 4 sous forme développée

m11[m22(m33m44m34m43)+m23(m34m42m32m44)+m24(m32m43m33m42)]m12[m21(m33m44m34m43)+m23(m34m41m31m44)+m24(m31m43m33m41)]+m13[m21(m32m44m34m42)+m22(m34m41m31m44)+m24(m31m42m32m41)]m14[m21(m32m43m33m42)+m22(m33m41m31m43)+m23(m31m42m32m41)].\begin{matrix} {\quad\ m_{11}\lbrack m_{22}(m_{33}m_{44} - m_{34}m_{43}) + m_{23}(m_{34}m_{42} - m_{32}m_{44}) + m_{24}(m_{32}m_{43} - m_{33}m_{42})\rbrack} \\ {- m_{12}\lbrack m_{21}(m_{33}m_{44} - m_{34}m_{43}) + m_{23}(m_{34}m_{41} - m_{31}m_{44}) + m_{24}(m_{31}m_{43} - m_{33}m_{41})\rbrack} \\ {+ m_{13}\lbrack m_{21}(m_{32}m_{44} - m_{34}m_{42}) + m_{22}(m_{34}m_{41} - m_{31}m_{44}) + m_{24}(m_{31}m_{42} - m_{32}m_{41})\rbrack} \\ {- m_{14}\lbrack m_{21}(m_{32}m_{43} - m_{33}m_{42}) + m_{22}(m_{33}m_{41} - m_{31}m_{43}) + m_{23}(m_{31}m_{42} - m_{32}m_{41})\rbrack.} \\ \end{matrix}

Comme vous pouvez l’imaginer, la complexité des formules explicites pour les déterminants de degré plus élevé croît rapidement. Heureusement, nous pouvons effectuer une opération connue sous le nom de « pivotage », qui n’affecte pas la valeur du déterminant, mais fait qu’une ligne ou colonne particulière est remplie de zéros sauf pour un seul élément (l’élément « pivot »). Il faut alors n’évaluer qu’un seul cofacteur. Puisque nous n’aurons de toute façon pas besoin de déterminants de matrices au-delà du cas 4×44 \times 4 , une discussion complète du pivotage dépasse la portée de ce livre.

Énonçons brièvement quelques caractéristiques importantes des déterminants.

image

Figure 6.1 Le déterminant en 2D est l’aire signée de la boîte oblique formée par les vecteurs de base transformés.

6.1.4Interprétation géométrique du déterminant

Le déterminant d’une matrice a une interprétation géométrique intéressante. En 2D, le déterminant est égal à l’aire signée du parallélogramme ou boîte oblique ayant les vecteurs de base comme deux côtés (voir la figure 6.1). (Nous avons discuté de la façon dont nous pouvons utiliser les boîtes obliques pour visualiser les transformations d’espaces de coordonnées dans la section 4.2.) Par aire signée, nous voulons dire que l’aire est négative si la boîte oblique est « retournée » par rapport à son orientation originale.

En 3D, le déterminant est le volume du parallélépipède ayant les vecteurs de base transformés comme trois arêtes. Il sera négatif si l’objet est réfléchi (« retourné de l’intérieur ») à la suite de la transformation.

Le déterminant est lié au changement de taille résultant de la transformation par la matrice. La valeur absolue du déterminant est liée au changement d’aire (en 2D) ou de volume (en 3D) qui se produira à la suite de la transformation d’un objet par la matrice, et le signe du déterminant indique si une réflexion ou projection est contenue dans la matrice.

Le déterminant de la matrice peut également être utilisé pour aider à classer le type de transformation représenté par une matrice. Si le déterminant d’une matrice est zéro, la matrice contient une projection. Si le déterminant est négatif, une réflexion est contenue dans la matrice. Voir la section 5.7 pour plus de détails sur les différentes catégories de transformations.

6.2Inverse d’une matrice

Une autre opération importante qui ne s’applique qu’aux matrices carrées est la

inverse d’une matrice. Cette section traite de l’inverse matricielle d’un point de vue mathématique et géométrique.

L’inverse d’une matrice carrée 𝐌\mathbf{M} , notée 𝐌1\mathbf{M}^{- 1} , est la matrice telle que lorsqu’on multiplie 𝐌\mathbf{M} par 𝐌1\mathbf{M}^{- 1} d’un côté ou de l’autre, le résultat est la matrice identité. En d’autres termes,

Inverse d’une matrice

𝐌(𝐌1)=𝐌1𝐌=𝐈.\mathbf{M}(\mathbf{M}^{- 1}) = \mathbf{M}^{- 1}\mathbf{M} = \mathbf{I}.

Toutes les matrices n’ont pas d’inverse. Un exemple évident est une matrice avec une ligne ou colonne remplie de 0 — peu importe par quoi on multiplie cette matrice, la ligne ou colonne correspondante du résultat sera également remplie de 0. Si une matrice a une inverse, on dit qu’elle est inversible ou non singulière. Une matrice qui n’a pas d’inverse est dite non inversible ou singulière. Pour toute matrice inversible 𝐌\mathbf{M} , l’égalité vectorielle 𝐯𝐌=0\mathbf{v}\mathbf{M} = 0 n’est vraie que lorsque 𝐯=0\mathbf{v} = 0 . De plus, les lignes d’une matrice inversible sont linéairement indépendantes, tout comme les colonnes. Les lignes (et colonnes) d’une matrice singulière sont linéairement dépendantes.

Le déterminant d’une matrice singulière est zéro et le déterminant d’une matrice non singulière est non nul. Vérifier l’amplitude du déterminant est le test le plus couramment utilisé pour l’inversibilité car c’est le plus facile et le plus rapide. Dans des circonstances ordinaires, cela est correct, mais veuillez noter que la méthode peut échouer. Un exemple est une matrice de cisaillement extrême avec des vecteurs de base formant un parallélépipède très long et mince de volume unitaire. Cette matrice mal conditionnée est presque singulière, bien que son déterminant soit 1. Le nombre de condition est l’outil approprié pour détecter de tels cas, mais c’est un sujet avancé légèrement au-delà de la portée de ce livre.

Il existe plusieurs façons de calculer l’inverse d’une matrice. Celle que nous utilisons est basée sur l’adjoint classique, qui fait l’objet de la prochaine section.

6.2.1L’adjoint classique

Notre méthode pour calculer l’inverse d’une matrice est basée sur l’ adjoint classique. L’adjoint classique d’une matrice 𝐌\mathbf{M} , noté « adj𝐌{adj\ }\mathbf{M} », est défini comme la transposée de la matrice des cofacteurs de 𝐌\mathbf{M} .

Voyons un exemple. Prenons la matrice 3×33 \times 3 𝐌\mathbf{M} donnée précédemment :

𝐌=[433022141].\mathbf{M} = \begin{bmatrix} {- 4} & {- 3} & 3 \\ 0 & 2 & {- 2} \\ 1 & 4 & {- 1} \\ \end{bmatrix}.

D’abord, nous calculons les cofacteurs de 𝐌\mathbf{M} , comme discuté dans la section 6.1.2 :

C{11}=+|2421|=6,C{12}=|0121|=2,C{13}=+|0124|=2,C{21}=|3431|=9,C{22}=+|4131|=1,C{23}=|4134|=13,C{31}=+|3232|=0,C{32}=|4032|=8,C{33}=+|4032|=8.\begin{matrix} {C^{\{ 11\}} = +} & \left| \begin{matrix} 2 \\ 4 \\ \end{matrix} \right. & \left. \begin{matrix} {- 2} \\ {- 1} \\ \end{matrix} \right| & {\ = 6,} & {C^{\{ 12\}} = -} & \left| \begin{matrix} 0 \\ 1 \\ \end{matrix} \right. & \left. \begin{matrix} {- 2} \\ {- 1} \\ \end{matrix} \right| & {\ = - 2,} & {C^{\{ 13\}} = +} & \left| \begin{matrix} 0 \\ 1 \\ \end{matrix} \right. & \left. \begin{matrix} 2 \\ 4 \\ \end{matrix} \right| & {\ = - 2,} \\ & & & & & & & & & & & \\ {C^{\{ 21\}} = -} & \left| \begin{matrix} {- 3} \\ 4 \\ \end{matrix} \right. & \left. \begin{matrix} 3 \\ {- 1} \\ \end{matrix} \right| & {\ = 9,} & {C^{\{ 22\}} = +} & \left| \begin{matrix} {- 4} \\ 1 \\ \end{matrix} \right. & \left. \begin{matrix} 3 \\ {- 1} \\ \end{matrix} \right| & {\ = 1,} & {C^{\{ 23\}} = -} & \left| \begin{matrix} {- 4} \\ 1 \\ \end{matrix} \right. & \left. \begin{matrix} {- 3} \\ 4 \\ \end{matrix} \right| & {\ = 13,} \\ & & & & & & & & & & & \\ {C^{\{ 31\}} = +} & \left| \begin{matrix} {- 3} \\ 2 \\ \end{matrix} \right. & \left. \begin{matrix} 3 \\ {- 2} \\ \end{matrix} \right| & {\ = 0,} & {C^{\{ 32\}} = -} & \left| \begin{matrix} {- 4} \\ 0 \\ \end{matrix} \right. & \left. \begin{matrix} 3 \\ {- 2} \\ \end{matrix} \right| & {\ = - 8,} & {C^{\{ 33\}} = +} & \left| \begin{matrix} {- 4} \\ 0 \\ \end{matrix} \right. & \left. \begin{matrix} {- 3} \\ 2 \\ \end{matrix} \right| & {\ = - 8.} \\ \end{matrix}

L’adjoint classique de 𝐌\mathbf{M} est la transposée de la matrice des cofacteurs :

L’adjoint classique

adj𝐌=[C{11}C{12}C{13}C{21}C{22}C{23}C{31}C{32}C{33}]T=[6229113088]T=[6902182138].\begin{matrix} {{adj\ }\mathbf{M}} & {= \begin{bmatrix} C^{\{ 11\}} & C^{\{ 12\}} & C^{\{ 13\}} \\ C^{\{ 21\}} & C^{\{ 22\}} & C^{\{ 23\}} \\ C^{\{ 31\}} & C^{\{ 32\}} & C^{\{ 33\}} \\ \end{bmatrix}^{T}} \\ & {= \begin{bmatrix} 6 & {- 2} & {- 2} \\ 9 & 1 & 13 \\ 0 & {- 8} & {- 8} \\ \end{bmatrix}^{T} = \begin{bmatrix} 6 & 9 & 0 \\ {- 2} & 1 & {- 8} \\ {- 2} & 13 & {- 8} \\ \end{bmatrix}.} \\ \end{matrix}

6.2.2Inverse matricielle — Règles officielles d’algèbre linéaire

Pour calculer l’inverse d’une matrice, nous divisons l’adjoint classique par le déterminant :

Calcul de l’inverse matricielle à partir de l’adjoint classique et du déterminant

𝐌1=adj𝐌|𝐌|.\begin{matrix} {\mathbf{M}^{- 1} = \frac{{adj\ }\mathbf{M}}{\left| \mathbf{M} \right|}.} \\ \end{matrix}

Si le déterminant est zéro, la division est indéfinie, ce qui s’accorde avec notre affirmation antérieure que les matrices avec un déterminant nul ne sont pas inversibles.

Voyons un exemple. Dans la section précédente, nous avons calculé l’adjoint classique d’une matrice 𝐌\mathbf{M} ; calculons maintenant son inverse :

𝐌=[433022141];𝐌1=adj𝐌|𝐌|=124[6902182138]=[1/43/801/121/241/31/1213/241/3].\begin{matrix} \mathbf{M} & {= \begin{bmatrix} {- 4} & {- 3} & 3 \\ 0 & 2 & {- 2} \\ 1 & 4 & {- 1} \\ \end{bmatrix};} \\ \mathbf{M}^{- 1} & {= \frac{{adj\ }\mathbf{M}}{\left| \mathbf{M} \right|} = \frac{1}{- 24}\begin{bmatrix} 6 & 9 & 0 \\ {- 2} & 1 & {- 8} \\ {- 2} & 13 & {- 8} \\ \end{bmatrix} = \begin{bmatrix} {- 1/4} & {- 3/8} & 0 \\ {1/12} & {- 1/24} & {1/3} \\ {1/12} & {- 13/24} & {1/3} \\ \end{bmatrix}.} \\ \end{matrix}

Ici, la valeur de adj𝐌{adj\ }\mathbf{M} vient de l’équation (6.6), et |𝐌|\left| \mathbf{M} \right| vient de l’équation (6.3).

Il existe d’autres techniques pour calculer l’inverse d’une matrice, comme l’élimination gaussienne. De nombreux manuels d’algèbre linéaire affirment que de telles techniques sont mieux adaptées à l’implémentation sur ordinateur car elles nécessitent moins d’opérations arithmétiques, et cette affirmation est vraie pour les matrices plus grandes et les matrices dont la structure peut être exploitée. Cependant, pour des matrices arbitraires de petit ordre, telles que les matrices 2×22 \times 2 , 3×33 \times 3 , et 4×44 \times 4 rencontrées le plus souvent dans les applications géométriques, la méthode de l’adjoint classique est généralement la méthode de choix. La raison est que la méthode de l’adjoint classique permet une implémentation sans branchement, c’est-à-dire sans instructions if ni boucles qui ne peuvent pas être déroulées statiquement. Sur les architectures superscalaires d’aujourd’hui et les processeurs vectoriels dédiés, c’est un grand avantage.

Nous terminons cette section par une liste rapide de plusieurs propriétés importantes concernant les inverses matricielles.

6.2.3Inverse matricielle — Interprétation géométrique

L’inverse d’une matrice est géométriquement utile car elle nous permet de calculer la transformation « inverse » ou « opposée » — une transformation qui « annule » une autre transformation si elles sont effectuées en séquence. Ainsi, si nous prenons un vecteur, le transformons par une matrice 𝐌\mathbf{M} , puis le transformons par l’inverse 𝐌1\mathbf{M}^{- 1} , nous retrouvons le vecteur original. Nous pouvons facilement vérifier cela algébriquement :

(𝐯𝐌)𝐌1=𝐯(𝐌𝐌1)=𝐯𝐈=𝐯.(\mathbf{v}\mathbf{M})\mathbf{M}^{- 1} = \mathbf{v}(\mathbf{M}\mathbf{M}^{- 1}) = \mathbf{v}\mathbf{I} = \mathbf{v}.

6.3Matrices orthogonales

Nous avons fait précédemment référence à une catégorie particulière de matrices carrées connues sous le nom de matrices orthogonales. Cette section examine les matrices orthogonales de façon plus approfondie. Comme d’habitude, nous présentons d’abord quelques mathématiques pures (la section 6.3.1), puis nous donnons quelques interprétations géométriques (la section 6.3.2). Enfin, nous discutons de la façon d’ajuster une matrice arbitraire pour la rendre orthogonale (la section 6.3.3).

6.3.1Matrices orthogonales — Règles officielles d’algèbre linéaire

Une matrice carrée 𝐌\mathbf{M} est orthogonale si et seulement si1 le produit de la matrice et de sa transposée est la matrice identité :

Définition de matrice orthogonale

𝐌estorthogonale𝐌𝐌T=𝐈.\begin{matrix} {\mathbf{M}{\ est\ orthogonale}\Longleftrightarrow\mathbf{M}\mathbf{M}^{T} = \mathbf{I}.} \\ \end{matrix}

Rappelons de la section 6.2.2 que, par définition, une matrice multipliée par son inverse est la matrice identité ( 𝐌𝐌1=𝐈\mathbf{M}\mathbf{M}^{- 1} = \mathbf{I} ). Ainsi, si une matrice est orthogonale, sa transposée et son inverse sont égales :

Définition équivalente de matrice orthogonale

𝐌estorthogonale𝐌T=𝐌1.\begin{matrix} {\mathbf{M}{\ est\ orthogonale}\Longleftrightarrow\mathbf{M}^{T} = \mathbf{M}^{- 1}.} \\ \end{matrix}

C’est une information extrêmement puissante, car l’inverse d’une matrice est souvent nécessaire, et les matrices orthogonales apparaissent fréquemment en pratique dans les graphiques 3D. Par exemple, comme mentionné dans la section 5.7.5, les matrices de rotation et de réflexion sont orthogonales. Si nous savons que notre matrice est orthogonale, nous pouvons essentiellement éviter de calculer l’inverse, ce qui est un calcul relativement coûteux.

6.3.2Matrices orthogonales — Interprétation géométrique

Les matrices orthogonales nous intéressent principalement parce que leur inverse est trivial à calculer. Mais comment savoir si une matrice est orthogonale pour exploiter sa structure ?

Dans de nombreux cas, nous pouvons avoir des informations sur la façon dont la matrice a été construite et donc savoir a priori qu’elle ne contient que de la rotation et/ou de la réflexion. C’est une situation très courante, et il est très important d’en tirer parti lorsqu’on utilise des matrices pour décrire la rotation. Nous reviendrons sur ce sujet dans la section 8.2.1.

Mais que faire si nous ne savons rien à l’avance sur la matrice ? En d’autres termes, comment peut-on savoir si une matrice arbitraire 𝐌\mathbf{M} est orthogonale ? Examinons le cas 3×33 \times 3 , qui est le plus intéressant pour nos besoins. Les conclusions que nous tirons dans cette section peuvent être étendues aux matrices de n’importe quelle dimension.

Soit 𝐌\mathbf{M} une matrice orthogonale 3×33 \times 3 . En développant la définition de l’orthogonalité donnée par l’équation (6.7), nous obtenons

𝐌XXXXXXXXX𝐌TXXXX=𝐈,xxxxxxxxxxxxxxxxxxxxx[m11m12m13m21m22m23m31m32m33][m11m21m31m12m22m32m13m23m33]=[100010001].\begin{matrix} {\!\mathbf{M}\phantom{XXXXXXXXX}\mathbf{M}^{T}\phantom{XXXX}} & {= \mspace{29mu}\mathbf{I},\phantom{xxxxxxxxxxxxxxxxxxxxx}} \\ {\begin{bmatrix} m_{11} & m_{12} & m_{13} \\ m_{21} & m_{22} & m_{23} \\ m_{31} & m_{32} & m_{33} \\ \end{bmatrix}\begin{bmatrix} m_{11} & m_{21} & m_{31} \\ m_{12} & m_{22} & m_{32} \\ m_{13} & m_{23} & m_{33} \\ \end{bmatrix}} & {= \begin{bmatrix} 1 & 0 & 0 \\ 0 & 1 & 0 \\ 0 & 0 & 1 \\ \end{bmatrix}.} \\ \end{matrix}

Cela nous donne neuf équations, qui doivent toutes être vraies pour que 𝐌\mathbf{M} soit orthogonale :

Conditions satisfaites par une matrice orthogonale

m11m11+m12m12+m13m13=1,m11m21+m12m22+m13m23=0,m11m31+m12m32+m13m33=0,m21m11+m22m12+m23m13=0,m21m21+m22m22+m23m23=1,m21m31+m22m32+m23m33=0,m31m11+m32m12+m33m13=0,m31m21+m32m22+m33m23=0,m31m31+m32m32+m33m33=1.\begin{matrix} {m_{11}m_{11} + m_{12}m_{12} + m_{13}m_{13}} & {= 1,} \\ {m_{11}m_{21} + m_{12}m_{22} + m_{13}m_{23}} & {= 0,} \\ {m_{11}m_{31} + m_{12}m_{32} + m_{13}m_{33}} & {= 0,} \\ {m_{21}m_{11} + m_{22}m_{12} + m_{23}m_{13}} & {= 0,} \\ {m_{21}m_{21} + m_{22}m_{22} + m_{23}m_{23}} & {= 1,} \\ {m_{21}m_{31} + m_{22}m_{32} + m_{23}m_{33}} & {= 0,} \\ {m_{31}m_{11} + m_{32}m_{12} + m_{33}m_{13}} & {= 0,} \\ {m_{31}m_{21} + m_{32}m_{22} + m_{33}m_{23}} & {= 0,} \\ {m_{31}m_{31} + m_{32}m_{32} + m_{33}m_{33}} & {= 1.} \\ \end{matrix}

Soient les vecteurs 𝐫1\mathbf{r}_{1} , 𝐫2\mathbf{r}_{2} , et 𝐫3\mathbf{r}_{3} les lignes de 𝐌\mathbf{M} :

𝐫1=[m11m12m13],𝐫2=[m21m22m23],𝐫3=[m31m32m33],𝐌=[𝐫1𝐫2𝐫3].\begin{matrix} \mathbf{r}_{1} & {= \begin{bmatrix} m_{11} & m_{12} & m_{13} \\ \end{bmatrix},} \\ \mathbf{r}_{2} & {= \begin{bmatrix} m_{21} & m_{22} & m_{23} \\ \end{bmatrix},} \\ \mathbf{r}_{3} & {= \begin{bmatrix} m_{31} & m_{32} & m_{33} \\ \end{bmatrix},} \\ \mathbf{M} & {= \begin{bmatrix} {- \mathbf{r}_{1} -} \\ {- \mathbf{r}_{2} -} \\ {- \mathbf{r}_{3} -} \\ \end{bmatrix}.} \\ \end{matrix}

Nous pouvons maintenant réécrire les neuf équations plus compactement :

Conditions satisfaites par une matrice orthogonale

𝐫1𝐫1=1,𝐫1𝐫2=0,𝐫1𝐫3=0,𝐫2𝐫1=0,𝐫2𝐫2=1,𝐫2𝐫3=0,𝐫3𝐫1=0,𝐫3𝐫2=0,𝐫3𝐫3=1.\begin{matrix} {\mathbf{r}_{1} \cdot \mathbf{r}_{1}} & {= 1,} & {\mathbf{r}_{1} \cdot \mathbf{r}_{2}} & {= 0,} & {\mathbf{r}_{1} \cdot \mathbf{r}_{3}} & {= 0,} \\ {\mathbf{r}_{2} \cdot \mathbf{r}_{1}} & {= 0,} & {\mathbf{r}_{2} \cdot \mathbf{r}_{2}} & {= 1,} & {\mathbf{r}_{2} \cdot \mathbf{r}_{3}} & {= 0,} \\ {\mathbf{r}_{3} \cdot \mathbf{r}_{1}} & {= 0,} & {\mathbf{r}_{3} \cdot \mathbf{r}_{2}} & {= 0,} & {\mathbf{r}_{3} \cdot \mathbf{r}_{3}} & {= 1.} \\ \end{matrix}

Ce changement de notation facilite l’interprétation.

Donc, pour qu’une matrice soit orthogonale, les conditions suivantes doivent être remplies :

Des affirmations similaires peuvent être faites concernant les colonnes de la matrice, car si 𝐌\mathbf{M} est orthogonale, alors 𝐌T\mathbf{M}^{T} doit également être orthogonale.

Notez que ces critères sont précisément ceux que nous avons dit dans la section 3.3.3 être satisfaits par un ensemble de vecteurs de base orthonormés. Dans cette section, nous avons également noté qu’une base orthonormée était particulièrement utile car nous pouvions effectuer, à l’aide du produit scalaire, la transformation de coordonnées « inverse » de celle toujours disponible. Lorsque nous disons que la transposée d’une matrice orthogonale est égale à son inverse, nous ne faisons que réexprimer ce fait dans le langage formel de l’algèbre linéaire.

Notez également que trois des équations d’orthogonalité sont des doublons, car le produit scalaire est commutatif. Ainsi, ces neuf équations n’expriment en réalité que six contraintes. Dans une matrice 3×33 \times 3 arbitraire, il y a neuf éléments et donc neuf degrés de liberté, mais dans une matrice orthogonale, six degrés de liberté sont supprimés par les contraintes, laissant trois degrés de liberté. Il est significatif que trois soit également le nombre de degrés de liberté inhérents à la rotation 3D. (Cependant, les matrices de rotation ne peuvent pas contenir de réflexion, donc il y a « légèrement plus de liberté » dans l’ensemble des matrices orthogonales que dans l’ensemble des orientations en 3D.)

Lors du calcul d’une inverse matricielle, nous ne tirerons généralement parti de l’orthogonalité que si nous savons a priori qu’une matrice est orthogonale. Si nous ne le savons pas à l’avance, il est probablement inutile de vérifier. Dans le meilleur des cas, nous vérifions l’orthogonalité et constatons que la matrice est bien orthogonale, puis nous la transposons. Mais cela peut prendre presque autant de temps que d’effectuer l’inversion. Dans le pire des cas, la matrice n’est pas orthogonale, et tout le temps passé à vérifier a été définitivement perdu. Enfin, même les matrices qui sont orthogonales dans l’abstrait peuvent ne pas être exactement orthogonales lorsqu’elles sont représentées en virgule flottante, et nous devons donc utiliser des tolérances, qui doivent être ajustées.

Une remarque importante s’impose ici sur une terminologie qui peut être légèrement déroutante. En algèbre linéaire, nous décrivons un ensemble de vecteurs de base comme orthogonal s’ils sont mutuellement perpendiculaires. Il n’est pas requis qu’ils aient une longueur unité. S’ils ont une longueur unité, ils forment une base orthonormée. Ainsi, les lignes et colonnes d’une matrice orthogonale sont des vecteurs de base orthonormés. Cependant, la construction d’une matrice à partir d’un ensemble de vecteurs de base orthogonaux ne donne pas nécessairement une matrice orthogonale (à moins que les vecteurs de base soient également orthonormés).

6.3.3Orthogonalisation d’une matrice

Il arrive parfois que nous rencontrions une matrice légèrement hors d’orthogonalité. Nous pouvons avoir acquis de mauvaises données d’une source externe, ou avoir accumulé des erreurs en virgule flottante (ce qu’on appelle dérive matricielle). Pour les vecteurs de base utilisés pour le bump mapping (voir la section 10.9), nous ajusterons souvent la base pour qu’elle soit orthogonale, même si les gradients du mapping de texture ne sont pas tout à fait perpendiculaires. Dans ces situations, nous aimerions orthogonaliser la matrice, ce qui donne une matrice avec des axes de vecteurs unitaires mutuellement perpendiculaires et (espérons-le) aussi proche que possible de la matrice originale.

L’algorithme standard pour construire un ensemble de vecteurs de base orthogonaux (ce que sont les lignes d’une matrice orthogonale) est l’orthogonalisation de Gram-Schmidt. L’idée de base est de parcourir les vecteurs de base dans l’ordre. Pour chaque vecteur de base, nous soustrayons la partie de ce vecteur qui est parallèle aux vecteurs de base précédents, ce qui doit donner un vecteur perpendiculaire.

Examinons le cas 3×33 \times 3 comme exemple. Comme précédemment, soient 𝐫1\mathbf{r}_{1} , 𝐫2\mathbf{r}_{2} , et 𝐫3\mathbf{r}_{3} les lignes d’une matrice 3×33 \times 3 𝐌\mathbf{M} . (Rappelons que vous pouvez également les considérer comme les axes xx -, yy -, et zz - d’un espace de coordonnées.) Alors un ensemble orthogonal de vecteurs lignes, 𝐫1\mathbf{r}_{1}^{\prime} , 𝐫2\mathbf{r}_{2}^{\prime} , et 𝐫1\mathbf{r}_{1}^{\prime} , 𝐫2\mathbf{r}_{2}^{\prime} , et 𝐫3\mathbf{r}_{3}^{\prime} , peuvent être calculés selon l’algorithme suivant :

Orthogonalisation de Gram-Schmidt des vecteurs de base 3D

𝐫1𝐫1,𝐫2𝐫2𝐫2𝐫1𝐫1𝐫1𝐫1,𝐫3𝐫3𝐫3𝐫1𝐫1𝐫1𝐫1𝐫3𝐫2𝐫2𝐫2𝐫2.\begin{matrix} \mathbf{r}_{1}^{\prime} & {\Leftarrow\mathbf{r}_{1},} \\ \mathbf{r}_{2}^{\prime} & {\Leftarrow\mathbf{r}_{2} - \frac{\mathbf{r}_{2} \cdot \mathbf{r}_{1}^{\prime}}{\mathbf{r}_{1}^{\prime} \cdot \mathbf{r}_{1}^{\prime}}\mathbf{r}_{1}^{\prime},} \\ \mathbf{r}_{3}^{\prime} & {\Leftarrow\mathbf{r}_{3} - \frac{\mathbf{r}_{3} \cdot \mathbf{r}_{1}^{\prime}}{\mathbf{r}_{1}^{\prime} \cdot \mathbf{r}_{1}^{\prime}}\mathbf{r}_{1}^{\prime} - \frac{\mathbf{r}_{3} \cdot \mathbf{r}_{2}^{\prime}}{\mathbf{r}_{2}^{\prime} \cdot \mathbf{r}_{2}^{\prime}}\mathbf{r}_{2}^{\prime}.} \\ \end{matrix}

Après application de ces étapes, les vecteurs 𝐫1\mathbf{r}_{1} , 𝐫2\mathbf{r}_{2} , et 𝐫3\mathbf{r}_{3} sont garantis d’être mutuellement perpendiculaires, et formeront donc une base orthogonale. Cependant, ils ne sont pas nécessairement des vecteurs unitaires. Nous avons besoin d’une base orthonormée pour former une matrice orthogonale, et nous devons donc normaliser les vecteurs. (Là encore, la terminologie peut prêter à confusion ; voir la note à la fin de la section précédente.) Notez que si nous normalisons les vecteurs au fur et à mesure plutôt qu’en une seconde passe, nous pouvons éviter toutes les divisions. De plus, une astuce qui fonctionne en 3D (mais pas dans des dimensions supérieures) consiste à calculer le troisième vecteur de base à l’aide du produit vectoriel :

𝐫3𝐫1×𝐫2.\mathbf{r}_{3}^{\prime}\Leftarrow\mathbf{r}_{1}^{\prime} \times \mathbf{r}_{2}^{\prime}.

L’algorithme de Gram-Schmidt est biaisé selon l’ordre dans lequel les vecteurs de base sont listés. Par exemple, 𝐫1\mathbf{r}_{1} ne change jamais, et 𝐫3\mathbf{r}_{3} est susceptible de changer le plus. Une variante de l’algorithme qui n’est biaisée vers aucun axe particulier consiste à abandonner la tentative d’orthogonaliser entièrement la matrice en une seule passe. Nous sélectionnons une fraction kk , et au lieu de soustraire toute la projection, nous n’en soustrayons que kk . Nous soustrayons également la projection sur l’axe original et non sur l’axe ajusté. De cette façon, l’ordre dans lequel nous effectuons les opérations n’a pas d’importance et nous n’avons pas de biais dimensionnel. Cet algorithme est résumé par

Algorithme d’orthogonalisation incrémentale non biaisée

𝐫1𝐫1k𝐫1𝐫2𝐫2𝐫2𝐫2k𝐫1𝐫3𝐫3𝐫3𝐫3,𝐫2𝐫2k𝐫2𝐫1𝐫1𝐫1𝐫1k𝐫2𝐫3𝐫3𝐫3𝐫3,𝐫3𝐫3k𝐫3𝐫1𝐫1𝐫1𝐫1k𝐫3𝐫2𝐫2𝐫2𝐫2.\begin{matrix} \mathbf{r}_{1}^{\prime} & {\Leftarrow\mathbf{r}_{1} - k\frac{\mathbf{r}_{1} \cdot \mathbf{r}_{2}}{\mathbf{r}_{2} \cdot \mathbf{r}_{2}}\mathbf{r}_{2} - k\frac{\mathbf{r}_{1} \cdot \mathbf{r}_{3}}{\mathbf{r}_{3} \cdot \mathbf{r}_{3}}\mathbf{r}_{3},} \\ \mathbf{r}_{2}^{\prime} & {\Leftarrow\mathbf{r}_{2} - k\frac{\mathbf{r}_{2} \cdot \mathbf{r}_{1}}{\mathbf{r}_{1} \cdot \mathbf{r}_{1}}\mathbf{r}_{1} - k\frac{\mathbf{r}_{2} \cdot \mathbf{r}_{3}}{\mathbf{r}_{3} \cdot \mathbf{r}_{3}}\mathbf{r}_{3},} \\ \mathbf{r}_{3}^{\prime} & {\Leftarrow\mathbf{r}_{3} - k\frac{\mathbf{r}_{3} \cdot \mathbf{r}_{1}}{\mathbf{r}_{1} \cdot \mathbf{r}_{1}}\mathbf{r}_{1} - k\frac{\mathbf{r}_{3} \cdot \mathbf{r}_{2}}{\mathbf{r}_{2} \cdot \mathbf{r}_{2}}\mathbf{r}_{2}.} \\ \end{matrix}

Une itération de cet algorithme produit un ensemble de vecteurs de base légèrement « plus orthogonaux » que les vecteurs originaux, mais peut-être pas complètement orthogonaux. En répétant cette procédure plusieurs fois, nous pouvons éventuellement converger vers une base orthogonale. Choisir une valeur suffisamment petite pour kk (par exemple 1/41/4 ) et itérer un nombre de fois suffisant (par exemple dix) nous permet de nous en approcher assez. Ensuite, nous pouvons utiliser l’algorithme de Gram-Schmidt standard pour garantir une base parfaitement orthogonale.

6.4 4×44 \times 4 Matrices homogènes

Jusqu’à présent, nous n’avons utilisé que des vecteurs 2D et 3D. Dans cette section, nous introduisons les vecteurs 4D et la soi-disant coordonnée « homogène ». Il n’y a rien de magique dans les vecteurs et matrices 4D (et non, la quatrième coordonnée dans ce cas n’est pas le « temps »). Comme nous allons le voir, les vecteurs 4D et les matrices 4×44 \times 4 ne sont rien de plus qu’une commodité de notation pour des opérations 3D simples.

Cette section présente l’espace homogène 4D et les matrices de transformation 4×44 \times 4 ainsi que leur application à la géométrie 3D affine. La section 6.4.1 aborde la nature de l’espace homogène 4D et sa relation avec l’espace 3D physique. La section 6.4.2 explique comment les matrices de transformation 4×44 \times 4 peuvent être utilisées pour exprimer des translations. La section 6.4.3 explique comment les matrices de transformation 4×44 \times 4 peuvent être utilisées pour exprimer des transformations affines.

6.4.1Espace homogène 4D

Comme mentionné dans la section 2.1, les vecteurs 4D ont quatre composantes, les trois premières étant les composantes standard xx , yy , et zz . La quatrième composante d’un vecteur 4D est ww , parfois appelée la coordonnée homogène.

Pour comprendre comment l’espace 3D physique standard est étendu en 4D, examinons d’abord les coordonnées homogènes en 2D, qui sont de la forme (x,y,w)(x,y,w) . Imaginons le plan 2D standard comme existant en 3D dans le plan w=1w = 1 , de sorte que le point 2D physique (x,y)(x,y) est représenté dans l’espace homogène par (x,y,1)(x,y,1) . Pour tous les points qui ne se trouvent pas dans le plan w=1w = 1 , nous pouvons calculer le point 2D correspondant en projetant le point sur le plan w=1w = 1 , en divisant par ww . Ainsi, la coordonnée homogène (x,y,w)(x,y,w) est mappée au point 2D physique (x/w,y/w)(x/w,y/w) . Cela est illustré dans la figure 6.2.

image

Figure 6.2 Projection des coordonnées homogènes sur le plan w=1w = 1 en 2D

Pour tout point 2D physique (x,y)(x,y) donné, il existe une infinité de points correspondants dans l’espace homogène, tous de la forme (kx,ky,k)(kx,ky,k) , à condition que k0k \neq 0 . Ces points forment une droite passant par l’origine (homogène).

Lorsque w=0w = 0 , la division est indéfinie et il n’existe pas de point physique correspondant dans l’espace 2D. Cependant, nous pouvons interpréter un point homogène 2D de la forme (x,y,0)(x,y,0) comme un « point à l’infini », qui définit une direction plutôt qu’une position. Lorsque nous faisons la distinction conceptuelle entre « points » et « vecteurs » (voir la section 2.4), les « positions » où w0w \neq 0 sont des « points » et les « directions » avec w=0w = 0 sont des « vecteurs ». Nous reviendrons là-dessus dans la section suivante.

La même idée de base s’applique lorsqu’on étend l’espace 3D physique en espace homogène 4D (bien que ce soit beaucoup plus difficile à visualiser). Les points 3D physiques peuvent être considérés comme vivant dans l’hyperplan 4D en w=1w = 1 . Un point 4D est de la forme (x,y,z,w)(x,y,z,w) , et nous projetons un point 4D sur cet hyperplan pour obtenir le point 3D physique correspondant (x/w,y/w,z/w)(x/w,y/w,z/w) . Lorsque w=0w = 0 , le point 4D représente un « point à l’infini », qui définit une direction plutôt qu’une position.

Les coordonnées homogènes et la projection par division par ww sont intéressantes, mais pourquoi diable voudrait-on utiliser l’espace 4D ? Il y a deux raisons principales d’utiliser des vecteurs 4D et des matrices 4×44 \times 4 . La première raison, que nous abordons dans la section suivante, n’est en réalité rien de plus qu’une commodité de notation. La deuxième raison est que si nous mettons la valeur appropriée dans ww , la division homogène aura pour résultat une projection en perspective, comme nous l’abordons dans la section 6.5.

6.4.2 Matrices de translation 4×44 \times 4

Rappelons d’après la section 4.2 qu’une matrice de transformation 3×33 \times 3 représente une transformation linéaire, qui ne contient pas de translation. En raison de la nature de la multiplication matricielle, le vecteur nul est toujours transformé en vecteur nul, et donc toute transformation pouvant être représentée par une multiplication matricielle ne peut pas contenir de translation. C’est regrettable, car la multiplication et l’inversion matricielles sont des outils très pratiques pour composer des transformations complexes à partir de transformations simples et pour manipuler des relations d’espaces de coordonnées imbriquées. Il serait pratique de trouver un moyen d’étendre la matrice de transformation 3×33 \times 3 standard afin de pouvoir gérer les transformations avec translation ; les matrices 4×44 \times 4 fournissent un « bricolage » mathématique qui nous permet de faire cela.

Supposons pour l’instant que ww soit toujours 1. Ainsi, le vecteur 3D standard [x,y,z]\lbrack x,y,z\rbrack sera toujours représenté en 4D par [x,y,z,1]\lbrack x,y,z,1\rbrack . Toute matrice de transformation 3×33 \times 3 peut être représentée en 4D en utilisant la conversion

Extension d’une matrice de transformation 3×33 \times 3 en 4D

[m11m12m13m21m22m23m31m32m33][m11m12m130m21m22m230m31m32m3300001].\begin{bmatrix} m_{11} & m_{12} & m_{13} \\ m_{21} & m_{22} & m_{23} \\ m_{31} & m_{32} & m_{33} \\ \end{bmatrix}\Longrightarrow\begin{bmatrix} m_{11} & m_{12} & m_{13} & 0 \\ m_{21} & m_{22} & m_{23} & 0 \\ m_{31} & m_{32} & m_{33} & 0 \\ 0 & 0 & 0 & 1 \\ \end{bmatrix}.

Lorsque nous multiplions un vecteur 4D de la forme [x,y,z,1]\lbrack x,y,z,1\rbrack par une matrice 4×44 \times 4 de cette forme, nous obtenons le même résultat que dans le cas standard 3×33 \times 3 , la seule différence étant la coordonnée supplémentaire w=1w = 1 :

[xyz][m11m12m13m21m22m23m31m32m33]=[xm11+ym21+zm31xm12+ym22+zm32xm13+ym23+zm33];[xyz1][m11m12m130m21m22m230m31m32m3300001]=[xm11+ym21+zm31xm12+ym22+zm32xm13+ym23+zm331].\begin{matrix} {\begin{bmatrix} x & y & z \\ \end{bmatrix}\begin{bmatrix} m_{11} & m_{12} & m_{13} \\ m_{21} & m_{22} & m_{23} \\ m_{31} & m_{32} & m_{33} \\ \end{bmatrix}} & \\ & {= \begin{bmatrix} {xm_{11} + ym_{21} + zm_{31}} & {xm_{12} + ym_{22} + zm_{32}} & {xm_{13} + ym_{23} + zm_{33}} \\ \end{bmatrix};} \\ {\begin{bmatrix} x & y & z & 1 \\ \end{bmatrix}\begin{bmatrix} m_{11} & m_{12} & m_{13} & 0 \\ m_{21} & m_{22} & m_{23} & 0 \\ m_{31} & m_{32} & m_{33} & 0 \\ 0 & 0 & 0 & 1 \\ \end{bmatrix}} & \\ & {= \begin{bmatrix} {xm_{11} + ym_{21} + zm_{31}} & {xm_{12} + ym_{22} + zm_{32}} & {xm_{13} + ym_{23} + zm_{33}} & 1 \\ \end{bmatrix}.} \\ \end{matrix}

Voici maintenant la partie intéressante. En 4D, nous pouvons également exprimer une translation comme une multiplication matricielle, ce que nous ne pouvions pas faire en 3D :

Utilisation d’une matrice 4×44 \times 4 pour effectuer une translation en 3D

[xyz1][100001000010ΔxΔyΔz1]=[x+Δxy+Δyz+Δz1].\begin{matrix} {\begin{bmatrix} x & y & z & 1 \\ \end{bmatrix}\begin{bmatrix} 1 & 0 & 0 & 0 \\ 0 & 1 & 0 & 0 \\ 0 & 0 & 1 & 0 \\ {\Delta x} & {\Delta y} & {\Delta z} & 1 \\ \end{bmatrix} = \begin{bmatrix} {x + \Delta x} & {y + \Delta y} & {z + \Delta z} & 1 \\ \end{bmatrix}.} \\ \end{matrix}

Il est important de comprendre que cette multiplication matricielle est toujours une transformation linéaire. La multiplication matricielle ne peut pas représenter une « translation » en 4D, et le vecteur nul 4D sera toujours transformé en vecteur nul 4D. La raison pour laquelle cette astuce fonctionne pour transformer des points en 3D est que nous effectuons en réalité un cisaillement de l’espace 4D. (Comparez l’équation (6.11) avec les matrices de cisaillement de la section 5.5.) L’hyperplan 4D qui correspond à l’espace 3D physique ne passe pas par l’origine en 4D. Ainsi, lorsque nous cisaillons l’espace 4D, nous sommes capables de translater en 3D.

Examinons ce qui se passe lorsque nous effectuons une transformation sans translation suivie d’une transformation avec translation uniquement. Soit 𝐑\mathbf{R} une matrice de rotation. (En fait, 𝐑\mathbf{R} pourrait contenir d’autres transformations linéaires 3D, mais pour l’instant, supposons que 𝐑\mathbf{R} ne contient que de la rotation.) Soit 𝐓\mathbf{T} une matrice de translation de la forme de l’équation (6.11) :

𝐑=[r11r12r130r21r22r230r31r32r3300001],𝐓=[100001000010ΔxΔyΔz1].\begin{matrix} \mathbf{R} & {= \begin{bmatrix} r_{11} & r_{12} & r_{13} & 0 \\ r_{21} & r_{22} & r_{23} & 0 \\ r_{31} & r_{32} & r_{33} & 0 \\ 0 & 0 & 0 & 1 \\ \end{bmatrix},} & \mathbf{T} & {= \begin{bmatrix} 1 & 0 & 0 & 0 \\ 0 & 1 & 0 & 0 \\ 0 & 0 & 1 & 0 \\ {\Delta x} & {\Delta y} & {\Delta z} & 1 \\ \end{bmatrix}.} \\ \end{matrix}

Ensuite, nous pourrions faire pivoter puis translater un point 𝐯\mathbf{v} pour calculer un nouveau point 𝐯\mathbf{v}^{\prime} par

𝐯=𝐯𝐑𝐓.\mathbf{v}^{\prime} = \mathbf{v}\mathbf{R}\mathbf{T}.

Rappelons que l’ordre des transformations est important, et puisque nous avons choisi d’utiliser des vecteurs ligne, l’ordre des transformations coïncide avec l’ordre dans lequel les matrices sont multipliées, de gauche à droite. Nous effectuons d’abord la rotation puis la translation.

Tout comme avec les matrices 3×33 \times 3 , nous pouvons concaténer les deux matrices en une seule matrice de transformation, que nous assignons à la matrice 𝐌\mathbf{M} :

𝐌=𝐑𝐓,𝐯=𝐯𝐑𝐓=𝐯(𝐑𝐓)=𝐯𝐌.\begin{matrix} \mathbf{M} & {= \mathbf{R}\mathbf{T},} \\ \mathbf{v}^{\prime} & {= \mathbf{v}\mathbf{R}\mathbf{T} = \mathbf{v}(\mathbf{R}\mathbf{T}) = \mathbf{v}\mathbf{M}.} \\ \end{matrix}

Examinons maintenant le contenu de 𝐌\mathbf{M} :

𝐌=𝐑𝐓=[r11r12r130r21r22r230r31r32r3300001][100001000010ΔxΔyΔz1]=[r11r12r130r21r22r230r31r32r330ΔxΔyΔz1].\begin{matrix} {\mathbf{M} = \mathbf{R}\mathbf{T}} & {= \begin{bmatrix} r_{11} & r_{12} & r_{13} & 0 \\ r_{21} & r_{22} & r_{23} & 0 \\ r_{31} & r_{32} & r_{33} & 0 \\ 0 & 0 & 0 & 1 \\ \end{bmatrix}\begin{bmatrix} 1 & 0 & 0 & 0 \\ 0 & 1 & 0 & 0 \\ 0 & 0 & 1 & 0 \\ {\Delta x} & {\Delta y} & {\Delta z} & 1 \\ \end{bmatrix}} \\ & {= \begin{bmatrix} r_{11} & r_{12} & r_{13} & 0 \\ r_{21} & r_{22} & r_{23} & 0 \\ r_{31} & r_{32} & r_{33} & 0 \\ {\Delta x} & {\Delta y} & {\Delta z} & 1 \\ \end{bmatrix}.} \\ \end{matrix}

Remarquez que la partie 3×33 \times 3 supérieure de 𝐌\mathbf{M} contient la partie rotation, et la ligne inférieure contient la partie translation. La colonne la plus à droite (pour l’instant) sera [0,0,0,1]T\lbrack 0,0,0,1\rbrack^{T} .

En appliquant ces informations en sens inverse, nous pouvons prendre n’importe quelle matrice 4×44 \times 4 et la séparer en une partie transformation linéaire et une partie translation. Nous pouvons l’exprimer de façon concise avec la notation matricielle par blocs, en assignant le vecteur de translation [Δx,Δy,Δz]\lbrack\Delta x,\Delta y,\Delta z\rbrack au vecteur 𝐭\mathbf{t} :

𝐌=[𝐑0𝐭1].\mathbf{M} = \begin{bmatrix} \mathbf{R} & 0 \\ \mathbf{t} & 1 \\ \end{bmatrix}.

Pour l’instant, nous supposons que la colonne la plus à droite d’une matrice de transformation 4×44 \times 4 est toujours [0,0,0,1]T\lbrack 0,0,0,1\rbrack^{T} . Nous commencerons à rencontrer des situations où ce n’est pas le cas dans la section 6.5.

Voyons ce qui se passe avec les soi-disant « points à l’infini » (les vecteurs avec w=0w = 0 ). En multipliant par une matrice de transformation linéaire 3×33 \times 3 « standard » étendue en 4D (une transformation ne contenant pas de translation), nous obtenons

Multiplication d’un « point à l’infini » par une matrice 4×44 \times 4 sans translation

[xyz0][r11r12r130r21r22r230r31r32r3300001]=[xr11+yr21+zr31xr12+yr22+zr32xr13+yr23+zr330].\begin{matrix} {\begin{bmatrix} x & y & z & 0 \\ \end{bmatrix}\begin{bmatrix} r_{11} & r_{12} & r_{13} & 0 \\ r_{21} & r_{22} & r_{23} & 0 \\ r_{31} & r_{32} & r_{33} & 0 \\ 0 & 0 & 0 & 1 \\ \end{bmatrix}} \\ {= \begin{bmatrix} {xr_{11} + yr_{21} + zr_{31}} & {xr_{12} + yr_{22} + zr_{32}} & {xr_{13} + yr_{23} + zr_{33}} & 0 \\ \end{bmatrix}.} \\ \end{matrix}

Autrement dit, lorsque nous transformons un vecteur point-à-l’infini de la forme [x,y,z,0]\lbrack x,y,z,0\rbrack par une matrice de transformation contenant de la rotation, de la mise à l’échelle, etc., la transformation attendue se produit, et le résultat est un autre vecteur point-à-l’infini de la forme [x,y,z,0]\lbrack x^{\prime},y^{\prime},z^{\prime},0\rbrack .

Lorsque nous transformons un vecteur point-à-l’infini par une transformation qui contient de la translation, nous obtenons le résultat suivant :

Multiplication d’un « point à l’infini » par une matrice 4×44 \times 4 avec translation

[xyz0][r11r12r130r21r22r230r31r32r330ΔxΔyΔz1]=[xr11+yr21+zr31xr12+yr22+zr32xr13+yr23+zr330].\begin{matrix} {\begin{bmatrix} x & y & z & 0 \\ \end{bmatrix}\begin{bmatrix} r_{11} & r_{12} & r_{13} & 0 \\ r_{21} & r_{22} & r_{23} & 0 \\ r_{31} & r_{32} & r_{33} & 0 \\ {\Delta x} & {\Delta y} & {\Delta z} & 1 \\ \end{bmatrix}} \\ {= \begin{bmatrix} {xr_{11} + yr_{21} + zr_{31}} & {xr_{12} + yr_{22} + zr_{32}} & {xr_{13} + yr_{23} + zr_{33}} & 0 \\ \end{bmatrix}.} \\ \end{matrix}

Remarquez que le résultat est le même — c’est-à-dire qu’aucune translation ne se produit.

En d’autres termes, la composante ww d’un vecteur 4D peut être utilisée pour « désactiver » sélectivement la partie translation d’une matrice 4×44 \times 4 . Cela est utile car certains vecteurs représentent des « positions » et doivent être translatés, et d’autres vecteurs représentent des « directions », comme les normales de surface, et ne doivent pas être translatés. Dans un sens géométrique, nous pouvons considérer le premier type de données, avec w=1w = 1 , comme des « points », et le second type de données, les « points à l’infini » avec w=0w = 0 , comme des « vecteurs ».

Ainsi, l’une des raisons pour lesquelles les matrices 4×44 \times 4 sont utiles est qu’une matrice de transformation 4×44 \times 4 peut contenir de la translation. Lorsque nous utilisons des matrices 4×44 \times 4 uniquement à cette fin, la colonne la plus à droite de la matrice sera toujours [0,0,0,1]T\lbrack 0,0,0,1\rbrack^{T} . Puisque c’est le cas, pourquoi ne pas simplement supprimer cette colonne et utiliser une matrice 4×34 \times 3 ? Selon les règles de l’algèbre linéaire, les matrices 4×34 \times 3 sont indésirables pour plusieurs raisons :

La stricte adhésion aux règles de l’algèbre linéaire nous oblige à ajouter la quatrième colonne. Bien entendu, dans notre code, nous ne sommes pas liés par les règles de l’algèbre linéaire. Il est courant d’écrire une classe de matrice 4×34 \times 3 utile pour représenter des transformations contenant de la translation. En gros, une telle matrice est une matrice 4×44 \times 4 dont la colonne la plus à droite est supposée être [0,0,0,1]T\lbrack 0,0,0,1\rbrack^{T} et n’est donc pas explicitement stockée.

6.4.3Transformations affines générales

Le chapitre 5 a présenté des matrices 3×33 \times 3 pour de nombreuses transformations primitives. Comme une matrice 3×33 \times 3 ne peut représenter que des transformations linéaires en 3D, la translation n’était pas considérée. Armés de matrices de transformation 4×44 \times 4 , nous pouvons maintenant créer des transformations affines plus générales contenant de la translation, telles que :

L’idée de base est de translater le « centre » de la transformation vers l’origine, d’effectuer la transformation linéaire en utilisant les techniques développées dans le chapitre 5, puis de retransformer le centre vers sa position d’origine. Nous commençons avec une matrice de translation 𝐓\mathbf{T} qui translate le point 𝐩\mathbf{p} vers l’origine, et une matrice de transformation linéaire 𝐑\mathbf{R} du chapitre 5 qui effectue la transformation linéaire. La matrice de transformation affine finale 𝐀\mathbf{A} sera égale au produit matriciel 𝐓𝐑(𝐓1)\mathbf{T}\mathbf{R}(\mathbf{T}^{- 1}) , où 𝐓1\mathbf{T}^{- 1} est la matrice de translation avec le montant de translation opposé à celui de 𝐓\mathbf{T} .

Il est intéressant d’observer la forme générale d’une telle matrice. Écrivons d’abord 𝐓\mathbf{T} , 𝐑\mathbf{R} , et 𝐓1\mathbf{T}^{- 1} sous la forme partitionnée utilisée précédemment :

𝐓=[100001000010pxpypz1]=[𝐈0𝐩1];𝐑4×4=[r11r12r130r21r22r230r31r32r3300001]=[𝐑3×3001];𝐓1=[100001000010pxpypz1]=[𝐈0𝐩1].\begin{matrix} \mathbf{T} & {= \begin{bmatrix} 1 & 0 & 0 & 0 \\ 0 & 1 & 0 & 0 \\ 0 & 0 & 1 & 0 \\ {- p_{x}} & {- p_{y}} & {- p_{z}} & 1 \\ \end{bmatrix} = \begin{bmatrix} \mathbf{I} & 0 \\ {- \mathbf{p}} & 1 \\ \end{bmatrix};} \\ \mathbf{R}_{4 \times 4} & {= \begin{bmatrix} r_{11} & r_{12} & r_{13} & 0 \\ r_{21} & r_{22} & r_{23} & 0 \\ r_{31} & r_{32} & r_{33} & 0 \\ 0 & 0 & 0 & 1 \\ \end{bmatrix} = \begin{bmatrix} \mathbf{R}_{3 \times 3} & 0 \\ 0 & 1 \\ \end{bmatrix};} \\ \mathbf{T}^{- 1} & {= \begin{bmatrix} 1 & 0 & 0 & 0 \\ 0 & 1 & 0 & 0 \\ 0 & 0 & 1 & 0 \\ p_{x} & p_{y} & p_{z} & 1 \\ \end{bmatrix} = \begin{bmatrix} \mathbf{I} & 0 \\ \mathbf{p} & 1 \\ \end{bmatrix}.} \\ \end{matrix}

En évaluant la multiplication matricielle, nous obtenons

𝐓𝐑4×4𝐓1=[𝐈0𝐩1][𝐑3×3001][𝐈0𝐩1]=[𝐑3×30𝐩(𝐑3×3)+𝐩1].\mathbf{T}\mathbf{R}_{4 \times 4}\mathbf{T}^{- 1} = \begin{bmatrix} \mathbf{I} & 0 \\ {- \mathbf{p}} & 1 \\ \end{bmatrix}\begin{bmatrix} \mathbf{R}_{3 \times 3} & 0 \\ 0 & 1 \\ \end{bmatrix}\begin{bmatrix} \mathbf{I} & 0 \\ \mathbf{p} & 1 \\ \end{bmatrix} = \begin{bmatrix} \mathbf{R}_{3 \times 3} & 0 \\ {- \mathbf{p}\left( \mathbf{R}_{3 \times 3} \right) + \mathbf{p}} & 1 \\ \end{bmatrix}.

Ainsi, la translation supplémentaire dans une transformation affine ne modifie que la dernière ligne de la matrice 4×44 \times 4 . La partie 3×33 \times 3 supérieure, qui contient la transformation linéaire, n’est pas affectée.

Notre utilisation des coordonnées « homogènes » jusqu’ici n’a vraiment été qu’un bricolage mathématique pour nous permettre d’inclure de la translation dans nos transformations. Nous mettons des guillemets autour d’« homogènes » parce que la valeur ww était toujours 1 (ou 0, dans le cas des points à l’infini). Dans la section suivante, nous supprimerons les guillemets et discuterons de façons significatives d’utiliser les coordonnées 4D avec d’autres valeurs de ww .

6.5 Matrices 4×44 \times 4 et projection en perspective

La section 6.4.1 a montré que lorsque nous interprétons un vecteur homogène 4D en 3D, nous divisons par ww . Cette division est un outil mathématique dont nous n’avons pas vraiment profité dans la section précédente, puisque ww était toujours 1 ou 0. Cependant, si nous jouons bien nos cartes, nous pouvons utiliser la division par ww pour encapsuler de façon très concise l’opération géométrique importante qu’est la projection en perspective.

image

Figure 6.3La projection orthographique utilise des projecteurs parallèles.

Nous pouvons en apprendre beaucoup sur la projection en perspective en la comparant à un autre type de projection déjà abordé, la projection orthographique. La section 5.3 a montré comment projeter l’espace 3D sur un plan 2D, appelé plan de projection, en utilisant la projection orthographique. La projection orthographique est également connue sous le nom de projection parallèle, car les projecteurs sont parallèles. (Un projecteur est une droite reliant le point d’origine au point projeté sur le plan.) Les projecteurs parallèles utilisés dans la projection orthographique sont représentés dans la figure 6.3.

La projection en perspective en 3D se projette également sur un plan 2D. Cependant, les projecteurs ne sont pas parallèles. En fait, ils se croisent en un point, connu sous le nom de centre de projection. Cela est illustré dans la figure 6.4.

image

Figure 6.4 Avec la projection en perspective, les projecteurs se croisent au centre de projection.

Comme le centre de projection se trouve devant le plan de projection, les projecteurs se croisent avant de toucher le plan, ce qui entraîne une inversion de l’image. Lorsqu’on éloigne un objet du centre de projection, sa projection orthographique reste constante, mais la projection en perspective devient plus petite, comme illustré dans la figure 6.5. La théière de droite est plus éloignée du plan de projection, et sa projection est (légèrement) plus petite que celle de la théière plus proche. C’est un signal visuel très important connu sous le nom de raccourcissement perspectif.

image

Figure 6.5 En raison du raccourcissement perspectif, la projection de la théière de gauche est plus grande que la projection de la théière de droite. La théière de gauche est plus proche du plan de projection.

6.5.1Un sténopé

La projection en perspective est importante en infographie car elle modélise le fonctionnement du système visuel humain. En réalité, le système visuel humain est plus complexe car nous avons deux yeux, et pour chaque œil, la surface de projection (notre rétine) n’est pas plane ; examinons donc l’exemple plus simple d’un sténopé. Un sténopé est une boîte avec un minuscule trou sur l’un de ses côtés. Les rayons de lumière entrent dans le trou (convergeant ainsi en un point), puis frappent l’extrémité opposée de la boîte, qui est le plan de projection. Cela est illustré dans la figure 6.6.

image

Figure 6.6Un sténopé.

Dans cette vue, les côtés gauche et arrière de la boîte ont été supprimés pour que vous puissiez voir l’intérieur. Remarquez que l’image projetée sur le fond de la boîte est inversée. Cela est dû au fait que les rayons de lumière (les projecteurs) se croisent lorsqu’ils se rejoignent au niveau du trou (le centre de projection).

Examinons la géométrie derrière la projection en perspective d’un sténopé. Considérons un espace de coordonnées 3D avec l’origine au niveau du trou, l’axe zz perpendiculaire au plan de projection, et les axes xx et yy parallèles au plan de projection, comme indiqué dans la figure 6.7.

image

Figure 6.7 Un plan de projection parallèle au plan xyxy

Voyons si nous pouvons calculer, pour un point arbitraire 𝐩\mathbf{p} , les coordonnées 3D de 𝐩\mathbf{p}^{\prime} , qui est 𝐩\mathbf{p} projeté à travers le trou sur le plan de projection. Premièrement, nous devons connaître la distance du trou au plan de projection. Nous assignons cette distance à la variable dd . Ainsi, le plan est défini par l’équation z=dz = - d . Regardons maintenant les choses de côté et résolvons pour yy (voir la figure 6.8).

image

Figure 6.8 Vue de côté du plan de projection

Par triangles semblables, nous pouvons voir que

pyd=pyzpy=dpyz.\frac{- p_{y}^{\prime}}{d} = \frac{p_{y}}{z}\ \ \ \Longrightarrow\ \ \ p_{y}^{\prime} = \frac{- dp_{y}}{z}.

Remarquez que puisqu’un sténopé retourne l’image à l’envers, les signes de pyp_{y} et pyp_{y}^{\prime} sont opposés. La valeur de pxp_{x}^{\prime} est calculée de la même manière :

px=dpxz.p_{x}^{\prime} = \frac{- dp_{x}}{z}.

Les valeurs de zz de tous les points projetés sont les mêmes : d- d . Ainsi, le résultat de la projection d’un point 𝐩\mathbf{p} à travers l’origine sur un plan en z=dz = - d est

Projection sur le plan 𝐳=𝐝\mathbf{z} = - \mathbf{d}

𝐩=[xyz]𝐩=[xyz]=[dx/zdy/zd].\mathbf{p} = \begin{bmatrix} x & y & z \\ \end{bmatrix}\ \ \ \Longrightarrow\ \ \ \mathbf{p}^{\prime} = \begin{bmatrix} x^{\prime} & y^{\prime} & z^{\prime} \\ \end{bmatrix} = \begin{bmatrix} {- dx/z} & {- dy/z} & {- d} \\ \end{bmatrix}.

En pratique, les signes moins supplémentaires créent des complications inutiles, et nous déplaçons donc le plan de projection en z=dz = d , qui se trouve devant le centre de projection, comme indiqué dans la figure 6.9. Bien entendu, cela ne fonctionnerait jamais pour un vrai sténopé, puisque le but du trou est précisément de n’admettre que la lumière passant par un seul point. Cependant, dans l’univers mathématique d’un ordinateur, cela fonctionne très bien.

image

Figure 6.9 Plan de projection devant le centre de projection

Comme prévu, déplacer le plan de projection devant le centre de projection supprime les signes moins gênants :

Projection d’un point sur le plan 𝐳=𝐝\mathbf{z} = \mathbf{d}

𝐩=[xyz]=[dx/zdy/zd].\begin{matrix} {\mathbf{p}^{\prime} = \begin{bmatrix} x^{\prime} & y^{\prime} & z^{\prime} \\ \end{bmatrix} = \begin{bmatrix} {dx/z} & {dy/z} & d \\ \end{bmatrix}.} \\ \end{matrix}

6.5.2Matrices de projection en perspective

Comme la conversion de l’espace 4D en espace 3D implique une division, nous pouvons encoder une projection en perspective dans une matrice 4×44 \times 4 . L’idée de base est de trouver une équation pour 𝐩\mathbf{p}^{\prime} avec un dénominateur commun pour xx , yy , et zz , puis de configurer une matrice 4×44 \times 4 qui fixe ww égal à ce dénominateur. Nous supposons que les points originaux ont w=1w = 1 .

Premièrement, nous manipulons l’équation (6.12) pour avoir un dénominateur commun :

𝐩=[dx/zdy/zd]=[dx/zdy/zdz/z]=[xyz]z/d.\mathbf{p}^{\prime} = \begin{bmatrix} {dx/z} & {dy/z} & d \\ \end{bmatrix} = \begin{bmatrix} {dx/z} & {dy/z} & {dz/z} \\ \end{bmatrix} = \frac{\begin{bmatrix} x & y & z \\ \end{bmatrix}}{z/d}.

Pour diviser par ce dénominateur, nous plaçons le dénominateur dans ww , de sorte que le point 4D sera de la forme

[xyzz/d].\begin{bmatrix} x & y & z & {z/d} \\ \end{bmatrix}.

Nous avons donc besoin d’une matrice 4×44 \times 4 qui multiplie un vecteur homogène [x,y,z,1]\lbrack x,y,z,1\rbrack pour produire [x,y,z,z/d]\lbrack x,y,z,z/d\rbrack . La matrice qui réalise cela est

Projection sur le plan 𝐳=𝐝\mathbf{z} = \mathbf{d} à l’aide d’une matrice 4×44 \times 4

[xyz1][100001000011/d0000]=[xyzz/d].\begin{bmatrix} x & y & z & 1 \\ \end{bmatrix}\begin{bmatrix} 1 & 0 & 0 & 0 \\ 0 & 1 & 0 & 0 \\ 0 & 0 & 1 & {1/d} \\ 0 & 0 & 0 & 0 \\ \end{bmatrix} = \begin{bmatrix} x & y & z & {z/d} \\ \end{bmatrix}.

Nous avons ainsi dérivé une matrice de projection 4×44 \times 4 .

Plusieurs points importants méritent d’être soulignés ici :

Exercices

  1. Calculez le déterminant de la matrice suivante :

    [3214]\begin{bmatrix} 3 & {- 2} \\ 1 & 4 \\ \end{bmatrix}

  2. Calculez le déterminant, l’adjoint classique et l’inverse de la matrice suivante :

    [320140002]\begin{bmatrix} 3 & {- 2} & 0 \\ 1 & 4 & 0 \\ 0 & 0 & 2 \\ \end{bmatrix}

  3. La matrice suivante est-elle orthogonale ?

    [0.14950.19860.96850.82560.56400.01170.54390.80150.2484]\begin{bmatrix} {- 0.1495} & {- 0.1986} & {- 0.9685} \\ {- 0.8256} & 0.5640 & 0.0117 \\ {- 0.5439} & {- 0.8015} & 0.2484 \\ \end{bmatrix}

  4. Inversez la matrice de l’exercice précédent.

  5. Inversez la matrice 4×44 \times 4

    [0.14950.19860.968500.82560.56400.011700.54390.80150.248401.79285.31168.01511].\begin{bmatrix} {- 0.1495} & {- 0.1986} & {- 0.9685} & 0 \\ {- 0.8256} & 0.5640 & 0.0117 & 0 \\ {- 0.5439} & {- 0.8015} & 0.2484 & 0 \\ 1.7928 & {- 5.3116} & 8.0151 & 1 \\ \end{bmatrix}.

  6. Construisez une matrice 4×44 \times 4 pour translater de [4,2,3]\lbrack 4,2,3\rbrack .

  7. Construisez une matrice 4×44 \times 4 pour effectuer une rotation de 20° autour de l’axe xx , puis une translation de [4,2,3]\lbrack 4,2,3\rbrack .

  8. Construisez une matrice 4×44 \times 4 pour translater de [4,2,3]\lbrack 4,2,3\rbrack , puis effectuer une rotation de 20° autour de l’axe xx .

  9. Construisez une matrice 4×44 \times 4 pour effectuer une projection en perspective sur le plan x=5x = 5 . (Supposez que l’origine est le centre de projection.)

  10. Utilisez la matrice de l’exercice précédent pour calculer les coordonnées 3D de la projection du point (105,243,89)(105, - 243,89) sur le plan x=5x = 5 .

Une tentative de visualisation de la quatrième dimension :
Prenez un point, étirez-le en une droite, enroulez-la en un cercle,
tordez-le en une sphère, et percez la sphère.

— Albert Einstein (1879–1955)

  1. La notation «  PQP\Leftrightarrow Q » doit se lire « PP si et seulement si QQ » et indique que l’énoncé PP est vrai si et seulement si QQ est également vrai. « Si et seulement si » est en quelque sorte un signe égal pour les valeurs booléennes. En d’autres termes, si PP ou QQ est vrai, alors les deux doivent être vrais, et si PP ou QQ est faux, alors les deux doivent être faux. La notation \Leftrightarrow est également similaire à la notation « = » standard en ce sens qu’elle est réflexive. C’est une façon élaborée de dire que peu importe lequel est à gauche et lequel est à droite ; PQP\Leftrightarrow Q implique QPQ\Leftrightarrow P .

<< Matrices et transformations linéaires

Retour en haut

Systèmes de coordonnées polaires >>