Notations matricielles


« Retour au sommaire

Dans les parties précédentes, nous avons vu le lien entre un changement de base et une rotation. Dans cette partie, nous allons voir que nous pouvons utiliser l’algèbre des matrices pour représenter ces transformations.

Matrices, vecteurs et multiplication

Les matrices sont des objets mathématiques qui sont représentées sous forme de tableaux à deux dimensions, par exemple:

\[\begin{bmatrix} a & b \\ c & d \end{bmatrix}\]

Les vecteurs sont des matrices à une seule colonne:

\[\begin{bmatrix} e \\ f \end{bmatrix}\]

La multiplication matricielle \(A \times B\) s’effectue en multipliant les lignes de \(A\) par les colonnes de \(B\), voici un exemple:

Ici, on multiplie une matrice 2x2 par une matrice 2x1 (un vecteur). On multiplie donc d’abord les éléments de la première ligne \(\begin{bmatrix}a & b\end{bmatrix}\) par ceux de l’unique colonne \(\begin{bmatrix}e \\ f\end{bmatrix}\), ce qui donne \(a \times e + b \times f\), puis les éléments de la deuxième ligne \(\begin{bmatrix}a & b\end{bmatrix}\) par la même colonne pour obtenir \(c \times e + d \times f\).

Attention, ce calcul n'est pas commutatif. C'est à dire que `A B != B A`. Dans le cas d'une multiplication matrice x vecteur, `B A` n'est même pas correct car les dimensions ne sont pas bonnes (`A` doit avoir autant de colonnes que `B` de lignes).

Matrice de rotation

Expression

L’équation suivante du changement de base entre deux repères orthonormés 2D avec un angle \(\alpha\):

\[\begin{cases} x = cos(\alpha) x' - sin(\alpha) y' \\ y = sin(\alpha) x' + cos(\alpha) y \end{cases}\]

Peut donc s’écrire en notation matricielle:

\[\begin{bmatrix} x \\ y \end{bmatrix} = \underbrace{ \begin{bmatrix} cos(\alpha) & -sin(\alpha) \\ sin(\alpha) & cos(\alpha) \end{bmatrix} }_{R(\alpha)} \begin{bmatrix} x' \\ y' \end{bmatrix}\]

On appelle \(R(\alpha)\) la matrice de rotation.

Utilisation

Si on dispose de deux repères \(\{ r_1 \} = (O, \vec{i}, \vec{j})\) et \((O, \vec{i'}, \vec{j'})\) avec un angle \(\alpha\) entre \(\{ r_2 \} = \vec{i}\) et \(\vec{i'}\), alors la matrice de rotation \(R(\alpha)\) est la matrice de changement de base de \(\{ r_2 \}\) vers \(\{ r_1 \}\):

\[R_{r_1 r_2} = R(\alpha)\]

Dans \(\{ r_2 \}\), les coordonnées du vecteur \(\vec{i'}\) sont \(\begin{bmatrix} 1 \\ 0 \end{bmatrix}\), après changement de base on obtient:

\[\begin{bmatrix} cos(\alpha) & -sin(\alpha) \\ sin(\alpha) & cos(\alpha) \end{bmatrix} \begin{bmatrix} 1 \\ 0 \end{bmatrix} = \begin{bmatrix} cos(\alpha) \\ sin(\alpha) \end{bmatrix}\]

Aussi, les coordonnées de \(\vec{j'}\) sont \(\begin{bmatrix} 0 \\ 1 \end{bmatrix}\), on obtient donc:

\[\begin{bmatrix} cos(\alpha) & -sin(\alpha) \\ sin(\alpha) & cos(\alpha) \end{bmatrix} \begin{bmatrix} 0 \\ 1 \end{bmatrix} = \begin{bmatrix} -sin(\alpha) \\ cos(\alpha) \end{bmatrix}\]

Donc, la première colonne de la matrice de rotation peut être vue comme les coordonnées du premier vecteur de l’ancienne base exprimées dans la nouvelle base, et ainsi de suite:

\[R = \begin{bmatrix} \vec{i'}_{r_1} & \vec{j'}_{r_1} \end{bmatrix}\]

Où \(\vec{i'}_{r_1}\) est le vecteur 2x1 des coordonnées de \(\vec{i'}\) dans \(\{ r_1 \}\) et \(\vec{j'}_{r_1}\) le vecteur 2x1 des coordonnées de \(\vec{y2}\) dans \(\{ r_1 \}\).

Inverse d’une matrice de rotation

Inverse et transposée

L’inverse d’une matrice de rotation \(R(\alpha)\) est la matrice \(R(-\alpha)\):

\[R(-\alpha) = \begin{bmatrix} cos(-\alpha) & -sin(-\alpha) \\ sin(-\alpha) & cos(-\alpha) \end{bmatrix} = \begin{bmatrix} cos(\alpha) & sin(\alpha) \\ -sin(\alpha) & cos(\alpha) \end{bmatrix}\]

Car \(cos(-\alpha) = cos(\alpha)\) (la fonction \(cos\) est paire) et \(sin(-\alpha) = -sin(\alpha)\) (la fonction \(sin\) est impaire).

On remarque que la diagonale ne change pas, et que les deux éléments hors-diagonale ont simplement été inversés: \(R(-\alpha)\) est ce qu’on appelle la transposée de \(R(\alpha)\); une matrice dans laquelle les lignes et les colonnes ont été inversés, on le note:

\[R(-\alpha) = R(\alpha)^T\]

Inverse de la matrice

Supposons que l’on prenne les coordonnées d’un point \(P\), nous avons dit que:

\[P' = R(\alpha) P\]

Permettait de calculer l’image de \(P\) par une rotation de \(\alpha\). Dans ce cas:

\[P = R(-\alpha) R(\alpha) P\]

Devrait être vrai pour tout \(P\), car il s’agit d’effectuer une rotation dans un sens, puis dans l’autre sens du même angle \(\alpha\).

Pour vérifier, on peut multiplier les matrices ensemble:

\[R(-\alpha) R(\alpha) = \begin{bmatrix} cos(\alpha) & -sin(\alpha) \\ sin(\alpha) & cos(\alpha) \end{bmatrix} \begin{bmatrix} cos(\alpha) & sin(\alpha) \\ -sin(\alpha) & cos(\alpha) \end{bmatrix} \\ = \begin{bmatrix} cos(\alpha)^2 + sin(\alpha) ^2 & cos(\alpha) sin(\alpha) - cos(\alpha) sin(\alpha) \\ cos(\alpha) sin(\alpha) - cos(\alpha) sin(\alpha) & cos(\alpha)^2 + sin(\alpha) ^2 \end{bmatrix} \\ = \underbrace{ \begin{bmatrix} 1 & 0 \\ 0 & 1 \end{bmatrix} }_{I}\]

La matrice obtenue (\(I\)) est appellée la matrice identité (c’est un élément neutre dans la multiplication: elle ne change pas la matrice ou le vecteur par lequel elle est multipliée).

Donc:

\[R(\alpha) R(-\alpha) = R(-\alpha) R(\alpha) = I\]

Ce qui signifie que \(R(-\alpha) = R(\alpha)^T = R(\alpha)^{-1}\), où \(-1\) désigne ici l’inverse de la matrice \(R(\alpha)\).

Changements de repères

Soit un repère `\{ r_1 \} = (O, \vec{i}, \vec{j})`, un repère `\{ r_2 \} = (A, \vec{i'}, \vec{j'})`, sachant que `\alpha` est l'angle entre `\vec{i}` et `\vec{i'}`, pour point `P`, on a: $$ P_{r_1} = R(\alpha) P_{r_2} + A_{r_1} \space \space \space \space (1) $$
En inversant cette formule, on obtient: $$ P_{r_2} = R(\alpha)^{-1} (P_{r_1} - A_{r_1}) \space \space \space \space (2) $$

Coordonnées homogènes

Présentation

Comme on peut le remarquer, la formule du changement de repère ci-dessus comporte une partie linéaire (la rotation) et une partie affine (la translation).

C’est pour cette raison qu’elle fait intervenir deux opérations:

  • La multiplication matricielle \(R(\alpha) P_{r_2}\),
  • L’addition vectorielle avec \(A_{r_1}\).

Il existe une méthode permettant de cumuler ces deux opérations dans une seule multiplication matricielle, pour ce faire, on ajoutera un \(1\) à la fin du vecteurs de coordonnées (il sera donc de dimension 3 en 2D et de dimension 4 en 3D):

\[\begin{bmatrix} x \\ y \\ 1 \end{bmatrix}\]

Ainsi, on utilisera des matrices dites homogènes de cette forme:

\[\begin{bmatrix} r_{11} & r_{12} & t_x \\ r_{21} & r_{22} & t_y \\ 0 & 0 & 1 \end{bmatrix} \begin{bmatrix} x \\ y \\ 1 \end{bmatrix} = \begin{bmatrix} r_{11} x + r_{12} y + t_x \\ r_{21} x + r_{22} y + t_ y \\ 1 \end{bmatrix}\]

On obtient des nouvelles coordonnées qui comportent la même rotation, mais avec également une translation. Cette translation est rendue possible par la multiplication avec le terme \(1\) du vecteur initial. Ce \(1\) est conservé par la multiplication avec la dernière ligne de la matrice.

Transformations élémentaires

On peut donc représenter une rotation pure sous la forme:

\[\begin{bmatrix} cos(\alpha) & -sin(\alpha) & 0 \\ sin(\alpha) & cos(\alpha) & 0 \\ 0 & 0 & 1 \end{bmatrix}\]

Et une translation pure sous la forme:

\[\begin{bmatrix} 1 & 0 & t_x \\ 0 & 1 & t_y \\ 0 & 0 & 1 \end{bmatrix}\]
Ces transformations pures sont une bonne illustration de la non commutativité de la multiplication matricielle (`AB != BA`): une rotation puis une translation n'est pas du tout pareil qu'une translation puis une rotation!

Matrices de transformation

Ces matrices homogènes seront de dimension 3x3 en 2D et 4x4 en 3D. En se basant sur l’équation \((1)\), on peut trouver la matrice suivante qui permettra d’effectuer la transformation avec des coordonnées homogènes:

\[T_{r_1 r_2} = \begin{bmatrix} R(\alpha) & A_{r_1} \\ 0_{1 \times 3} & 1 \end{bmatrix}\]

On note ici \(T_{r_1 r_2}\) la matrice de transformation du repère \(\{ r_2 \}\) au repère \(\{ r_1 \}\). On pourra appliquer la même règle d’annulation de l’indice qu’avec les rotations:

\[P_{r_1} = T_{r_1 \color{red}{r_2}} P_{\color{red}{r_2}}\]

Ici, \(\color{red}{r_2}\) peut être éliminé. La même règle s’applique si on enchaîne les changements de repères:

\[P_{r_1} = T_{r_1 \color{red}{r_2}} T_{\color{red}{r_2} \color{red}{r_3}} P_{\color{red}{r_3}}\]

Inversion

En reprenant l’équation \((2)\), on a:

\[P_{r_2} = R(\alpha)^{-1} P_{r_1} - R(\alpha)^{-1} A_{r_1}\]

On peut donc en déduire \(T_{r_2 r_1}\):

\[T_{r_2 r_1} = \begin{bmatrix} R(\alpha)^{-1} & -R(\alpha)^{-1} A_{r_1} \\ 0_{1 \times 3} & 1 \end{bmatrix} \space \space \space \space (3)\]

Avec la règle vue précédemment:

\[T_{r_1 \color{red}{r_2}} T_{\color{red}{r_2} r_1} = T_{r_1 r_1} = I\]

\(T_{r_1 r_1}\) est l’identité (\(I\)) car changer des coordonnées d’un repère à lui-même n’a aucun effet. Donc, \(T_{r_2 r_1} = T_{r_1 r_2}^{-1}\), l’inverse de \(T_{r_1 r_2}\). Cependant, plutôt que d’inverser la matrice, on utilisera plutôt l’équation \((3)\).


Dans la prochaine partie, nous allons voir comment nous pouvons implémenter cela en Python