Rotation autour d’un axe quelconque

Intro :

Voici les matrices de rotation des axes X, Y et Z :

matrix_rotation

Nous savons comment faire une rotation autour des axes X, Y, et Z, mais comment faire une rotation à partir d’un axe quelconque différent des précédents ?

Prérequis :

– Savoir ce qu’est une matrice

– Savoir ce qu’est une transformation de repère

– Savoir utiliser les objets et fonctions mathématiques de la librairie D3DX

Explications :

Nous allons présenter deux méthodes : la formule de Rodrigues en deux variantes et une fonction correspondante de la librairie D3DX.


La formule de Rodrigues suivante permet de calculer la position d’un point subissant une rotation autour d’un axe quelconque.

Les variables sont : \({v} \) la position d’un point qui subit la rotation ; \({\theta} \) un angle de rotation ; \({k} \) vecteur d’unité 1 qui joue le rôle d’axis de rotation.

\({v}_\mathrm{rot} = {v} \cos\theta + ({k} \times {v})\sin\theta + {k} ({k} \cdot {v}) (1 – \cos\theta) \)

Voici l’implémentation de cette formule en C++ :

Une autre formule de Rodrigues permet de calculer rapidement la matrice de révolution autour d’un axe et d’un angle quelconques.

Les variables sont : la matrice de rotation \(\mathbf{R}_{\mathbf{K}}(\theta) \) autour d’un axe \({k} = ( k_{1}, k_{2}, k_{3} ) \) d’unité 1 et d’angle \(\theta \) ; \(\mathbf{I} \) étant la matrice identité ;

et la matrice \(\mathbf{K} = \left[\begin{array}{ccc} 0 & -k_3 & k_2 \\ k_3 & 0 & -k_1 \\ -k_2 & k_1 & 0 \end{array}\right] \)

\(\mathbf{R}_{\mathbf{K}}(\theta) = \mathbf{I} + (\sin\theta) \mathbf{K}+ (1-\cos\theta)\mathbf{K}{^2} \)

Voici l’implémentation de cette formule en C++ :


D’autre part, on peut aussi se servir de la fonction D3DXMatrixRotationAxis équivalente à la précédente formule de Rodrigues :

Résumé :

Nous avons appris deux méthodes qui permet de faire la rotation d’un point.

Références :

– https://en.wikipedia.org/wiki/Rodrigues%27_rotation_formula