QUATERNION Arithmétique des quaternions Rotation au moyen de quaternions Convertir des matrices de rotation et des quaternions Rick Parent, Animatique Algorithmes et techniques. Vuibert, Paris, 2003, 530p.
Définition d’un quaternion Un quaternion peut être représenté à l’aide - d’un quadruplet de nombres réels q [s, x, y, z] ou encore, - sous une forme plus abrégée, q [s, v], s , v un vecteur 3D. Les opérations suivantes sont définies : Addition de 2 quaternions : [s1, v1] + [s2, v2] = [s1 + s2, v1 + v2], s1, s2 , v1, v2 des vecteurs 3D Multiplication d’un quaternion par un scalaire : (ii) [s, v] = [ s, v], , s , v un vecteur 3D Multiplication de 2 quaternions : [s1, v1] . [s2, v2] = [s1s2 - v1.v2, s1v2 + s2v1 + v1 x v2], s1, s2 , v1, v2 des vecteurs 3D produit scalaire produit vectoriel
Différentes propriétés des quaternions La multiplication de 2 quaternions n’est pas commutative. a. [s1, v1] . [s2, v2] [s2, v2] . [s1, v1], s1, s2 , v1, v2 des vecteurs 3D La multiplication de quaternions est associative. b. ([s1, v1] . [s2, v2]) . [s3, v3] = [s1, v1] . ([s2, v2] . [s3, v3]), s1, s2 , s3 , v1, v2 et v3 des vecteurs 3D. La multiplication de 2 quaternions dont les vecteurs respectifs sont orthogonaux équivaut au produit vectoriel de ces 2 vecteurs. c. [0, v1] . [0, v2] = [0, v1 x v2] v1 . v2 = 0 v1, v2 des vecteurs 3D [1, (0, 0, 0)] est l’élément neutre de la multiplication. d. [s, v] . [1, (0, 0, 0)] = [s, v] s , v un vecteur 3D.
Différentes propriétés des quaternions L’inverse d’un quaternion q [s, v], noté q-1 est obtenu comme suit : e. q-1 = [s, -v] / (s2 + || v ||2) s , v un vecteur 3D Ainsi, q . q-1 = q-1 . q = [1, (0, 0, 0)]. Définition de la norme d’un quaternion : || q ||2 = s2 + || v ||2 Par conséquent, q / || q || est appelé quaternion unitaire. (p . q) -1 = q-1 . p-1 f. g. En posant q [s, w] et Tq(v) = q . [0, v] . q-1 , on obtient : Tq(v) : un quaternion de la forme [0, u], où u est un vecteur 3D. Tq(Tp(v)) = Tq.p (v). Tq-1(v) = q-1 . [0, v] . q Tq(v) = Tq(v), 0.
Transformation de rotation du vecteur v d’un angle autour d’un des axes principaux T,w(v) = [ cos (/2), sin (/2) w] . [0, v] . [ cos (/2), sin (/2) w]-1 h. où w = e1 si la rotation se fait autour de l’axe des x, w = e2 si la rotation se fait autour de l’axe des y, w = e3 si la rotation se fait autour de l’axe des z. Exemple : La transformation de rotation du vecteur v d’un angle autour de l’axe des x nous donne comme prévu : [0, Rx() v] où Rx() = 1 0 0 0 cos - sin 0 sin cos
la transformation est obtenue comme suit: Transformation de rotation du vecteur w d’un angle autour d’un axe de rotation v unitaire quelconque T,v(w) = [ cos (/2), sin (/2) v] . [0, w] . [ cos (/2), sin (/2) v]-1 i. Note : la transformation est obtenue comme suit: faire coïncider le vecteur v avec l'axe des Z; ii) rotation d'un angle q autour de l'axe des Z; iii) se ramener à l'emplacement original du vecteur. (0, uy, uz) Faire coïncider le vecteur v avec l'axe des Z Cette transformation affine est obtenue ainsi: - une rotation d'un angle b autour de l'axe des X: RXb cos b = uz / ||(0, uy, uz)|| sin b = uy / ||(0, uy, uz)|| où (0, uy, uz) = ProjYZu.
T,v(w) = RX-b RY-a RZq RYa RXb (ux, 0, ||(0, uy, uz)||) - une rotation d'un angle a autour de l'axe des Y: RYa cos a = ||(0, uy, uz)|| sin a = -ux. Nous avons alors: T,v(w) = RX-b RY-a RZq RYa RXb Note : Le quaternion représentant la rotation du vecteur 3D w1 à w2 est : [cos (/2), sin (/2) (w1 x w2 )] où cos = w1 . w2 sin
Composition de transformations de rotation Soient T1,v1(w) et T2,v2(w), avec q1 = [ cos (1/2), sin (1/2) v1], q2 = [ cos (2/2), sin (2/2) v2], v1 et v2 sont unitaires, T2,v2(T1,v1(w) ) = q2 . (q1 [0, w] q1-1) . q2-1 = (q2 . q1) . [0, w] . (q1-1 . q2-1) = (q2 . q1) . [0, w] . (q2 . q1)-1 = Tq2.q1(w) Cas particulier : Une rotation avec son inverse donne l’identité. T-,v(T,v(w) ) = [1, 0] . [0, w] [1, 0] -1 = [0, w]. Tout multiple scalaire d’un quaternion représente la même rotation. Remarque : Tq(w) = Tq(w), 0 avec q = [ cos (/2), sin (/2) v]. C’est le cas de = -1.
Convertir des matrices de rotation et des quaternions Pourquoi ? Les quaternions sont souvent utilisés pour interpoler des orientations et le résultat est converti en une matrice de rotation, de façon à pouvoir la combiner avec d’autres matrices liées aux opérations d’affichage. Procédure q matrice de rotation Soit q = [s, w], ||q|| = 1, calculons d’abord q . [0, v] . q-1 : Tq(v) = q . [0, v] . q-1 = [s, w] [0, v] [s, -w] = [- w.v, s v + w x v] [s, -w] = [0, (w.v) w + s2v + s(w x v) – (s v + w x v) x w] = [0, (w.v) w + s2v + 2s(w x v) – (w x v) x w] = [0, 2(w.v) w + s2v + 2s(w x v) – (w . w) v].
Convertir des matrices de rotation et des quaternions En posant w = (x, y, z), on obtient : Tq(v) = [0, M v] où M 1 – 2y2 – 2z2 2xy –2sz 2xz + 2sy 2xy + 2sz 1 – 2x2 – 2z2 2yz – 2sx 2xz – 2sy 2yz + 2sx 1 – 2x2 – 2y2 Procédure matrice de rotation q Soit la matrice de rotation suivante, R r0,0 r0,1 r02 r1,0 r1,1 r12 r2,0 r2,1 r22 en examinant M, on obtient : la somme des éléments diagonaux donne 4s2 – 1, les éléments diagonaux peuvent également être utilisés pour résoudre les termes restants. diapositive suivante
Convertir des matrices de rotation et des quaternions r0,0 + r1,1 + r2,2 + 1 2 s = r0,0 = 1 – 2y2 – 2z2 = 1 – 2 (y2 + z2) = 1 – 2 (1 - x2 - s2) = -1 + 2x2 + 2s2 x = r0,0 + 1 – 2 s2 2 y = r1,1 + 1 – 2 s2 2 z = r2,2 + 1 – 2 s2 2 Note : Les racines carrées pour obtenir x, y et z peuvent être évitées si s 0 : r1,0 – r0,1 = 4 sz, r2,0 – r0,2 = -4 sy, r2,1 – r1,2 = 4 sx.
Représentation de phénomènes naturels Un quaternion peut aussi être défini comme suit : Q = w + x i + y j + z k où w, x, y et z sont des nombres réels, i, j et k désignent des coefficients imaginaires distincts, avec i2 = j2 = k2 = -1, ij = k, jk = i, ki = j, ji = -k, kj = -i, ik = -j. Nous verrons plus loin comment nous pouvons utiliser les quaternions pour représenter des phénomènes naturels.
Arithmétique des quaternions Soient Q = w + x i + y j + z k = (w, (x, y, z)) R = a + b i + c j + d k = (a, (b, c, d)), Q + R = (w + a) + (x + b) i + (y + c) j + (z + d) k Q - R = (w - a) + (x - b) i + (y - c) j + (z - d) k Q R = (wa – xb – yc - zd) + (wb + xa + yd - zc) i + (wc – xd + ya - zb) j + (wd + xc – yb + za) k || Q ||2 = w 2 + x 2 + y 2 + z 2 Conjugué de Q (Q*): w - x i - y j - z k Q-1 = Q* / ||Q|| Q / R = R-1 Q etc.
Conclusion L’usage des quaternions nous permettra d’interpoler entre des orientations afin de générer une image d’images clés.