Matrice de rotation - Définition

Source: Wikipédia sous licence CC-BY-SA 3.0.
La liste des auteurs de cet article est disponible ici.

Matrices de rotation aléatoires

Il est parfois nécessaire de construire une matrice de rotation aléatoire (avec une distribution uniforme). Intuitivement, il semble clair en dimension 2 que cela implique que l'angle de rotation soit uniformément distribué entre 0 et 2π. Cette intuition est correcte, mais ne s'étend pas aux dimensions supérieures. Ainsi, si nous considérons les matrices de rotation 3×3 sous la forme axe-angle, l'angle ne doit pas être uniformément distribué ; la probabilité que la mesure de l'angle soit au plus θ devrait être1π(θ − sin θ), pour 0 ≤ θ ≤ π.

Comme SO(n) est un groupe de Lie connexe et localement compact, nous avons un critère simple de distribution uniforme, à savoir que la distribution soit invariante par rotation (les "translations" du groupe) ; cette définition correspond à la mesure de Haar. Il est possible d'utiliser la transformation de Cayley pour engendrer et tester des matrice selon ce critère.

On peut également engendrer une distribution uniforme en toute dimension à l'aide de l'algorithme du sous-groupe de Diaconis et Shashani, lequel exploite récursivement la structure des groupes emboîtés de SO(n), de la manière suivante : engendrer un angle au hasard entre 0 et 2π et construire la matrice de rotation 2×2 correspondante. Pour passer de n à n+1, engendrer un vecteur v uniformément distribué sur la n-sphère, Sn, prolonger la n×n matrice en ajoutant comme dernière colonne et dernière ligne (0,…,0,1), et composer par une rotation cette nouvelle matrice pour que la dernière colonne devienne v.

Comme d'habitude, des méthodes plus spécialisées existent pour le cas 3×3. Dans chaque cas, on commence par choisir trois nombres indépendants uniformément distribués entre 0 et 1. Arvo part d'une transformation de Householder et exploite la dimension impaire pour en tirer une rotation en la multipliant par -1, puis pour déterminer l'axe d'une rotation uniformément distribuée.

Une autre méthode part de quaternions de norme 1. La multiplication des matrices est homéomorphe à celle des quaternions, et multiplier par un quaternion unitaire revient à faire tourner la sphère unité. Comme cet homéomorphisme est localement une isométrie, on en conclut qu'on obtiendra une distribution uniforme sur SO(3) en partant d'une distribution uniforme sur S3.

Il est également possible d'utiliser les angles d'Euler, mais avec une distribution non uniforme.

Enfin, sous la forme axe-angle, l'axe doit être uniformément distribué, mais l'angle de rotation a la distribution non-uniforme notée précédemment.

Conversions

Nous avons vu l'existence de plusieurs décompositions et constructions progressives s'appliquant en toutes dimensions. Nous allons à présent nous intéresser de plus près au cas des rotations en dimension 3.

Quaternions

Réécrivons à nouveau la matrice générale de rotation 3×3 sous la forme

 Q = \begin{bmatrix}     1 - 2 y^2 - 2 z^2 & 2 x y - 2 z w & 2 x z + 2 y w \\     2 x y + 2 z w & 1 - 2 x^2 - 2 z^2 & 2 y z - 2 x w \\     2 x z - 2 y w & 2 y z + 2 x w & 1 - 2 x^2 - 2 y^2 \end{bmatrix} .

À présent, chaque composante d'un quaternion apparaît (doublée) dans un terme de degré 2, et si tous ces termes sont nuls, nous obtenons une matrice identité. Ceci permet une conversion efficace et robuste d'un quaternion quelconque (unitaire ou non, et même nul) vers une matrice de rotation 3×3.

Puisqu'il n'est plus nécessaire que les quaternions utilisés soient unitaires, nous pouvons utiliser les quaternions non nuls comme des coordonnées homogènes pour les matrices de rotation 3×3. La transformation de Cayley discutée plus haut est obtenue en divisant le quaternion par sa composante en w. Pour une rotation de 180° autour d'un axe, w sera nul, ce qui explique la limitation de Cayley.

La somme des termes de la diagonale principale (la trace), vaut 3−4(x2+y2+z2), c'est-à-dire 2w2+2w2-1. On voit que les termes de la diagonale ont tous la même forme : 2x2+2w2−1, 2y2+2w2−1, et 2z2+2w2−1.

La diagonale de la matrice permet ainsi de comparer les valeurs absolues des quatre composantes du quaternion ; nous pouvons en fait les obtenir en n'utilisant que des sommes et des racines carrées, et déterminer les signes à l'aide des coefficients (antisymétriques) hors de la diagonale.

Décomposition polaire

Si M, une matrice n×n, est régulière, ses colonnes forment une base, que le procédé d'orthogonalisation de Schmidt permet de transformer en une base orthonormale. En termes d'algèbre linéaire numérique, nous transformons M en une matrice orthogonale Q, à l'aide de la décomposition QR. Cependant, on préfèrerait souvent obtenir la matrice Q « la plus proche » de M, ce que cette méthode échoue à faire ; l'outil approprié pour cela est la décomposition polaire.

Pour mesurer la proximité des matrices, nous pouvons utiliser n'importe quelle norme invariante par transformations orthogonales. Un choix approprié est celui de la norme de Frobenius, ||QM||F, la racine carrée de la somme des carrés des différences des termes de Q et de M. Exprimé en termes de la trace, Tr, notre but est de

  • Trouver Q minimisant Tr( (QM)t(QM) ),sous la contrainte QtQ = I.

Bien qu'écrite en termes matriciels, la fonction d'optimisation est simplement un polynôme quadratique. Nous pouvons le minimiser simplement en cherchant où sa dérivée s'annule. Pour une matrice 3×3, la condition d'orthogonalité entraîne six égalités (scalaires) que doivent satisfaire les coefficients de Q. Pour y ajouter les contraintes, on peut employer la méthode standard des multiplicateurs de Lagrange, formant ici une matrice symétrique Y. Ainsi, notre méthode consiste à :

  • Dériver Tr( (QM)t(QM) + (QtQI)Y ) par rapport aux termes de Q, et chercher où ces dérivées partielles s'annulent.

Axe et angle de rotation

Pour construire efficacement une matrice de rotation à partir d'un angle θ et d'un vecteur axial unitaire u, nous pouvons utiliser les symétries (et antisymétries) entre les termes :

      c = cos(θ); s = sin(θ); C = 1-c      xs = x*s;   ys = y*s;   zs = z*s      xC = x*C;   yC = y*C;   zC = z*C      xyC = x*yC; yzC = y*zC; zxC = z*xC      [ x*xC+c   xyC-zs   zxC+ys ]      [ xyC+zs   y*yC+c   yzC-xs ]      [ zxC-ys   yzC+xs   z*zC+c ]      

Déterminer un axe et un angle, comme déterminer un quaternion, n'est possible qu'au signe près ; en effet, (u,θ) et (−u,−θ) correspondent à la même matrice de rotation, tout comme q et −q. Mais cette détermination présente des difficultés supplémentaires : l'angle peut être restreint à l'intervalle entre 0° et 180°, mais les angles ne sont définis qu'à 360° près. De plus, quand l'angle est nul, l'axe n'est pas défini; quand l'angle est 180°, la matrice devient symétrique, ce qui rend difficile la détermination de l'axe. Ainsi, près des multiples de 180°, il faut prêter beaucoup d'attention aux incertitudes numériques : en déterminant l'angle, une fonction arctangente à deux variables (avec atan2(sin θ,cos θ) égal à θ) est nécessaire pour éviter l'insensibilité de arccos ; de même, en calculant la norme d'un vecteur de l'axe (pour construire un vecteur unitaire) une approche en force brute peut perdre trop de précision. On peut souvent utiliser

      x = Qzy-Qyz      y = Qxz-Qzx      z = Qyx-Qxy      r = hypot(x,hypot(y,z))      t = Qxx+Qyy+Qzz      θ = atan2(r,t−1)      

Les composants x, y, et z de l'axe doivent ensuite être divisés par r. Comme pour la représentation par quaternions, des formules différentes doivent être utilisées quand t est négatif ; enfin, quand r est nul (parce que l'angle est nul), un axe doit être fourni arbitrairement.

Angles d'Euler

La complexité de la conversion est plus grande dans le cas des angles d'Euler (ici envisagés dans le sens le plus général). La première difficulté est de déterminer quel ordre d'axes cartésiens utiliser (parmi les 24 possibles). Supposons que les trois angles soient θ1, θ2, θ3 ; les physiciens et les chimistes peuvent les interpréter comme

 Q(\theta_1,\theta_2,\theta_3)=  Q_{\bold{z}}(\theta_1) Q_{\bold{y}}(\theta_2) Q_{\bold{z}}(\theta_3) , \,\!

alors que les aérodynamiciens utiliseront

 Q(\theta_1,\theta_2,\theta_3)=  Q_{\bold{z}}(\theta_3) Q_{\bold{y}}(\theta_2) Q_{\bold{x}}(\theta_1) . \,\!

Une approche systématique commence par choisir l'axe le plus à droite. Parmi toutes les permutations de (x,y,z), deux seulement placent cet axe en premier ; l'une est paire et l'autre impaire. Le choix de la parité permet ainsi de déterminer l'axe du milieu, laissant deux choix pour l'axe le plus à gauche, répétant ou non le premier choix. Ceci donne 3×2×2 = 12 variations ; choisissant des axes fixes ou mobiles, on aboutit à 24 possibilités.

Cela suffit à construire une matrice à partir des angles, mais de nombreux triplets différents peuvent donner la même matrice. Ainsi, si nous utilisons la convention zyz choisie plus haut, nous avons les paires équivalentes suivantes :

(90°, 45°, −105°) (−270°, −315°, 255°) multiples de 360°
(72°, 0°, 0°) (40°, 0°, 32°) alignement singulier
(45°, 60°, −30°) (−135°, −60°, 150°) bascule bistable

Le problème de l'alignement singulier, l'analogue mathématique du phénomène physique de blocage de cardan (gimbal lock) se produit lorsque la rotation intermédiaire aligne les axes des deux autres rotations. Ces singularités ne sont pas caractéristiques de la matrice de rotation elle-même, et ne se produisent que lors de l'utilisation des angles d'Euler.

Pour les éviter, il faut manipuler la matrice en tant que famille de vecteurs-colonnes (ou lignes) orthonormale (appelés souvent, dans les applications 3D, vecteurs "droit", "haut" et "extérieur"); elles ne se produisent également pas lorsqu'on utilise les quaternions.

Page générée en 0.132 seconde(s) - site hébergé chez Contabo
Ce site fait l'objet d'une déclaration à la CNIL sous le numéro de dossier 1037632
A propos - Informations légales
Version anglaise | Version allemande | Version espagnole | Version portugaise