Quaternions
Transcription
Quaternions
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 : (i) [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 : (iii) [s1, v1] . [s2, v2] = [s1s2 - v1.v2, s1v2 + s2v1 + v1 x v2], v1, v2 des vecteurs2 3D s1, s2 ∈ℜ, produit scalaire produit vectoriel Différentes propriétés des quaternions a. La multiplication de 2 quaternions n’est pas commutative. [s1, v1] . [s2, v2] ≠ [s2, v2] . [s1, v1], s1, s2 ∈ℜ, v1, v2 des vecteurs 3D b. La multiplication de quaternions est associative. ([s1, v1] . [s2, v2]) . [s3, v3] = [s1, v1] . ([s2, v2] . [s3, v3]), s1, s2 , s3 ∈ℜ, v1, v2 et v3 des vecteurs 3D. c. La multiplication de 2 quaternions dont les vecteurs respectifs sont orthogonaux équivaut au produit vectoriel de ces 2 vecteurs. [0, v1] . [0, v2] = [0, v1 x v2] ⇔ v1 . v2 = 0 v1, v2 des vecteurs 3D d. [1, (0, 0, 0)] est l’élément neutre de la multiplication. [s, v] . [1, (0, 0, 0)] = [s, v] s ∈ℜ, v un vecteur 3D. 3 Différentes propriétés des quaternions e. L’inverse d’un quaternion q ≡ [s, v], noté q-1 est obtenu comme suit : 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. f. (p . q) -1 = q-1 . p-1 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 4 ∀λ ≠ 0. - Tλq(v) = Tq(v), Transformation de rotation du vecteur v d’un angle θ autour d’un des axes principaux h. Tθ,w(v) = [ cos (θ/2), sin (θ/2) w] . [0, v] . [ cos (θ/2), sin (θ/2) w]-1 où w = e1 w = e2 w = e3 si la rotation se fait autour de l’axe des x, si la rotation se fait autour de l’axe des y, 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 0 cos θ - sin θ sin θ cos θ 5 Transformation de rotation du vecteur w d’un angle θ autour d’un axe de rotation v unitaire quelconque i. Tθ,v(w) = [ cos (θ/2), sin (θ/2) v] . [0, w] . [ cos (θ/2), sin (θ/2) v]-1 Note : la transformation est obtenue comme suit: i) faire coïncider le vecteur v avec l'axe des Z; ii) rotation d'un angle θ autour de l'axe des Z; iii) se ramener à l'emplacement original du vecteur. (0, υy, υz) Faire coïncider le vecteur v avec l'axe des Z Cette transformation affine est obtenue ainsi: Z β υ - une rotation d'un angle β autour de l'axe des X: RXβ Y cos β = υz / ||(0, υy, υz)|| sin β = υy / ||(0, υy, υz)|| où (0, υy, υz) = ProjYZυ. X 6 (υx, 0, ||(0, υy, υz)||) Z 1 α - une rotation d'un angle α autour de l'axe des Y: RYα cos α = ||(0, υy, υz)|| sin α = -υx. X Nous avons alors: Tθ,v(w) = RX-β RY-α RZθ RYα RXβ Note : Le quaternion représentant la rotation du vecteur 3D w1 à w2 est : [cos (θ/2), sin (θ/2) (w1 x w2 )] où cos θ = w1 . w2 7 sin θ Y Composition de transformations de rotation Soient Tθ1,v1(w) et Tθ2,v2(w), avec Tθ2,v2(Tθ1,v1(w) ) q1 = [ cos (θ1/2), sin (θ1/2) v1], q2 = [ cos (θ2/2), sin (θ2/2) v2], v1 et v2 sont unitaires, = 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. Tλq(w) = Tq(w), ∀λ ≠ 0 avec q = [ cos (θ/2), sin (θ/2) v]. 8 C’est le cas de λ = -1. Remarque : 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]. 9 Convertir des matrices de rotation et des quaternions En posant w = (x, y, z), où M ≡ Procédure on obtient : Tq(v) = [0, M v] 1 – 2y2 – 2z2 2xy –2sz 2xy + 2sz 1 – 2x2 – 2z2 2xz – 2sy 2yz + 2sx 2xz + 2sy 2yz – 2sx 1 – 2x2 – 2y2 matrice de rotation → q Soit la matrice de rotation suivante, r0,1 R≡ r0,0 r1,0 r1,1 r2,0 r2,1 r02 r12 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 10 les termes restants. diapositive suivante Convertir des matrices de rotation et des quaternions s= r0,0 + r1,1 + r2,2 + 1 2 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 : r2,0 – r0,2 = -4 sy, r2,1 – r1,2 = 4 sx. r1,0 – r0,1 = 4 sz, Représentation de phénomènes naturels Un quaternion peut aussi être défini comme suit : Q=w+xi+yj+zk 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. 12 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)), (i) Q + R = (w + a) + (x + b) i + (y + c) j + (z + d) k (ii) Q - R = (w - a) + (x - b) i + (y - c) j + (z - d) k (iii) Q R = (wa – xb – yc - zd) + (wb + xa + yd - zc) i + (wc – xd + ya - zb) j + (wd + xc – yb + za) k (iv) || Q ||2 = w 2 + x 2 + y 2 + z 2 (v) Conjugué de Q (Q*): w - x i - y j - z k (vi) Q-1 = Q* / ||Q|| (vii) Q / R = R-1 Q etc. 13 Conclusion L’usage des quaternions nous permettra d’interpoler entre des orientations afin de générer une image d’images clés. 14