Les quaternions sont une généralisation des nombres complexes avec trois parties imaginaires (\(i\), \(j\) et \(k\) ). Un quaternion est un nombre complexe en dimension 4 qui peut être utilisé pour représenter l'orientation d'un corp rigide ou les coordonnées d'un repère dans un espace tri-dimensionnel. La définition générale d'un quaternion est donnée par :
$$ Q=a+b.i+c.j+d.k = \left[ \begin{matrix} a && b && c && d \end{matrix} \right] $$
Un quaternion représente une transformation de type rotation en 3D. Cette transformation peut aussi être représentée à partir des angles d'Eulers comme sur cet outil de visualisation des quaternions. Toutefois, le meilleur moyen de se représenter un quaternion est d'imaginer la rotation d'un angle donné autour d'un vecteur. La figure suivante illustre une rotation d'angle \( \theta \) autour du vecteur \( \vec{V} \) défini par trois scalaires ( \( V_x \), \( V_y \) et \( V_z \)) :
Le quaternion associé à cette transformation est donné par :
$$ Q = \left[ \begin{matrix} q_w && q_x && q_y && q_z \end{matrix} \right] $$
$$ Q = \left[ \begin{matrix} cos \frac{\theta}{2} && V_x.sin \frac{\theta}{2} && V_y.sin \frac{\theta}{2} && V_z.sin \frac{\theta}{2} \end{matrix} \right] $$
En s'appuyant sur la formule précédente, nous pouvons maintenant calculer le quaternion pour chacune des rotations autour des principaux axes :
$$ Q_X=\left[ \begin{matrix} cos \frac{\theta}{2} && sin \frac{\theta}{2} && 0 && 0 \end{matrix} \right] $$
$$ Q_Y=\left[ \begin{matrix} cos \frac{\theta}{2} && 0 && sin \frac{\theta}{2} && 0 \end{matrix} \right] $$
$$ Q_Z=\left[ \begin{matrix} cos \frac{\theta}{2} && 0 && 0 && sin \frac{\theta}{2} \end{matrix} \right] $$
Supposons que nous voulions calculer les coordonnées d'un vecteur \( \vec{v}_A \) (ou d'un point) qui subit une rotation définie par le quaternion \( {}^BQ_A \). Le vecteur résultant \( \vec{v}_B \) peut être calculé grâce à la formule suivante qui s'appuie sur le produit de quaternions et le quaternion conjugué.
$$ \vec{V}_B = {}^BQ_A \otimes \vec{V}_A \otimes \overline { {}^BQ_A } $$
Notons que les vecteurs \( \vec{V}_A \) et \( \vec{V}_B \) vivent dans \( \mathbb{R}^4 \) tandis que \( \vec{v}_A \) et \( \vec{v}_B \) vivent dans \( \mathbb{R}^3 \). \( \vec{V}_A \) et \( \vec{V}_B \) sont des quaternions purs dont la partie réelle est égale à zéro :
$$ \vec{V}_A = \begin{bmatrix} 0 \\ \vec{v}_A \end{bmatrix} = \begin{bmatrix} 0 \\ x_A \\ y_A \\ z_A \end{bmatrix} $$
$$ \vec{V}_B = \begin{bmatrix} 0 \\ \vec{v}_B \end{bmatrix} = \begin{bmatrix} 0 \\ x_B \\ y_B \\ z_B \end{bmatrix} $$
Un autre moyen de visualiser le résultat précédent est de considérer que les vecteurs \( \vec{Q_{V_A}} \) et \( \vec{Q_{V_B}} \) sont les mêmes vecteurs décrits respectivement dans les repères \( A \) et \( B \).
Le quaternion \( {}^BQ_A \) représente la transformation qui permet de passer du repère \( A \) au repère \( B \).
Cet exemple simple montre la rotation d'une ellipse définie dans le plan { \( \vec{X} \) , \( \vec{Y} \) }. Les point verts et rouges représentent respectivement les positions initiales et finales de l'ellipse. La ligne noire est l'axe de rotation. L'angle de rotation est de \( \frac {\pi}{4} \) et le vecteur de rotation est défini par :
$$ V_R = \begin{bmatrix} 1 \\ 1 \\ 0 \end{bmatrix} $$
Les fichiers de l'exemple précédent peuvent être téléchargés ici :
Credit: cet exemple utilise la bibliothèque quaternion pour Matlab écrite par S. Madgwick's.