Lipsum.dev

Commutativité, Quaternions et WebGL

18 septembre 2020

On peut introduire les nombres complexes de plusieurs façons.

Par exemple, par une approche gĂ©omĂ©trique, en les associant Ă  des points (a,b)(a, b) du plan qu’on peut additionner composante par composante.

La multiplication correspond alors Ă  une similitude directe et en particulier les nombres complexes unitaires — sur le cercle unitĂ© — correspondent Ă  des rotations.

Une approche algĂ©brique consiste Ă  remarquer que le polynĂŽme rĂ©el X2+1X^2 + 1 est irrĂ©ductible et permet donc de construire une extension algĂ©brique de degrĂ© 22 des rĂ©els — un corps dont les Ă©lĂ©ments sont des couples de rĂ©els.

Cette approche est détaillée dans une entrée précédente.

Ces deux approches sont bien entendu Ă©quivalentes – c’est l’art des mathĂ©matiques que de faire le lien entre des approches abstraites et des objets plus concrets.

Il n’est pas possible d’utiliser le mĂȘme procĂ©dĂ© pour construire un corps qui soit strictement une extension de C\Complex.

Ceci est une consĂ©quence du fait que C\Complex est algĂ©briquement clos — nous y reviendrons.

Pourtant, on peut munir l’ensemble des quadruplets (a,b,c,d)(a, b, c, d) de rĂ©els d’une multiplication.

L’ensemble obtenu, les quaternions, est presque un corps : il n’est pas commutatif (on peut avoir x×y≠y×xx \times y \neq y \times x).

Les quaternions ont un lien subtil avec les rotations de l’espace Ă  trois dimensions et sont utilisĂ©s dans de nombreux moteurs 3D.

Le cube ci-dessous utilise par exemple babylon.js, qui repose sur les quaternions pour modéliser les rotations (code source).

Vous pouvez le faire tourner grĂące aux flĂšches directionnelles.

Quaternion : w: —, x: —, y: —, z: —

Nous allons essayer ici de donner une idée de ce que sont ces quaternions, en commençant par quelques rappels sur les nombres complexes.

Des réels aux complexes

Les nombres complexes correspondent au plan R2\R^2 muni d’opĂ©rations ++ et ×\times avec des propriĂ©tĂ©s trĂšs similaires Ă  celles des nombres rĂ©els (qui en font un corps commutatif).

Du point de vue algĂ©brique, on peut les dĂ©finir comme des nombres de la forme z=a+biz = a + bi oĂč on a introduit un « nombre » ii et les rĂšgles de calcul suivantes :

  • L’addition se fait composante par composante (on somme les parties rĂ©elles et imaginaires)
  • La multiplication est associative et distributive, comme pour les rĂ©els, on peut donc calculer le produit de deux complexes en dĂ©veloppant les calculs Ă  partir de la table suivante :
×1i
11i
ii-1

En particulier, la multiplication ainsi définie est commutative.

Tout nombre complexe peut se dĂ©composer sous la forme z=rexp⁥(iφ){z = r \exp(i\varphi)} oĂč rr est un rĂ©el positif et exp⁥(iφ)=cos⁥(φ)+isin⁥(φ){\exp(i\varphi) = \cos(\varphi) + i \sin(\varphi)}. Cette forme met en Ă©vidence l’interprĂ©tation gĂ©omĂ©trique des nombres complexes :

Nombre complexe, forme polaire

Les points situĂ©s sur le cercle unitĂ© (cas r=1r = 1) correspondent alors Ă  des rotations par un angle φ\varphi. En particulier, la commutativitĂ© de la multiplication des complexes est intrinsĂšquement liĂ©e Ă  la commutativitĂ© des rotations du plan.

C\Complex est algébriquement clos

Comme expliquĂ© dans une autre entrĂ©e, l’existence des nombres complexes est due Ă  l’existence du polynĂŽme rĂ©el irrĂ©ductible P=X2+1P = X^2 + 1, dont on introduit une racine ii.

Le corps des nombres complexes est lui algébriquement clos : tout polynÎme de degré nn y admet nn racines comptées avec leur multiplicité.

Ce rĂ©sultat, connu sous le nom de ThĂ©orĂšme fondamental de l’algĂšbre fut prouvĂ© vers la fin du 18Ăšme siĂšcle, de façon plus ou moins rigoureuse.

Une de ses consĂ©quences est que tout corps commutatif qui est une extension des complexes est nĂ©cessairement de dimension infinie par rapport aux rĂ©els : ses Ă©lĂ©ments ne peuvent pas ĂȘtre dĂ©crits par des sĂ©quences finies de rĂ©els — on parle d’extension transcendante.

En particulier, on ne pourra pas trouver de structure de corps commutatif sur les quadruplets de rĂ©els (a,b,c,d)(a, b, c, d). Comme nous le verrons, il faudra renoncer Ă  la commutativité 

💡 Ébauche d’une preuve

Nous donnons ici un aperçu d’une preuve topologique du thĂ©orĂšme fondamental de l’algĂšbre, cette partie est facultative pour la comprĂ©hension de ce qui suit.

ConsidĂ©rons le polynĂŽme P=X4+X2+2X+10i+20P = X^4 + X^2 + 2X + 10i + 20 — qui n’a pas de racines rĂ©elles, ce dont je vous laisse vous convaincre en considĂ©rant par exemple sa partie rĂ©elle.

đŸ’» Le code ci-dessous permet d’obtenir l’image d’un cercle centrĂ© en l’origine OO, de rayon rr variant de Rmax=3.2R_{max} = 3.2 Ă  00, par la fonction z→P(z){z \to P(z)} (on utilise SageMath).

def polynomial(z):
P = z^4 + z^2 + 2*z + 10*I + 20
return (P.real(), P.imag())
plots = [
parametric_plot(polynomial(r*e^(I*x)), (x, 0, 2*pi))
for r in sxrange(3.2, 0, -0.1)
]
a = animate(plots, xmin=-100, ymin=-150, xmax=200, ymax=150, figsize=[5, 5])
a.show(delay=50)

Lorsque rr est « grand », le terme dominant z4=r4exp⁥(4iϕ)z^4 = r^4 \exp(4i \phi) donne une bonne approximation de la courbe obtenue : le cercle unitĂ© est transformĂ© en une courbe qui dĂ©crit approximativement un cercle de rayon r4r^4 parcouru quatre fois dans le sens trigonomĂ©trique.

Lorsque rr devient « petit », cette courbe se rétracte pour devenir finalement un simple point correspondant à P(0)P(0), de coordonnées (20,10)(20, 10).

La courbe traverse nĂ©cessairement l’origine OO quatre fois au cours de cette Ă©volution.

L’animation obtenue ci-dessous illustre ainsi cette preuve topologique assez classique.

C est algébriquement clos

Les quaternions

Les quaternions correspondent Ă  la dĂ©finition de rĂšgles de calcul sur l’espace Ă  quatre dimensions R4\R^4.

ConcrĂštement, on introduit trois « nombres » ii, jj et kk et l’on identifie un point (a,b,c,d)∈R4(a, b, c, d) \in \R^4 au quaternion q=a+bi+cj+dkq = a + bi + cj + dk.

  • L’addition se fait composante par composante, comme dans C\Complex.
  • La multiplication est associative et distributive, comme sur R\R et C\Complex, on peut donc calculer le produit de deux quaternions en dĂ©veloppant les calculs Ă  partir de la table suivante :
×1ijk
11ijk
ii-1k-j
jj-k-1i
kkj-i-1
  • Cette table n’étant pas symĂ©trique, la multiplication n’est pas commutative (par exemple, i×j=ki \times j = k, diffĂ©rent de j×i=−kj \times i = -k).

On remarque en particulier que les rÚgles de calcul sur les deux premiÚres composantes (terme réel et terme « en ii ») sont identiques à celles de C\Complex : les quaternions sont une extension des complexes.

Exercice : En utilisant les rĂšgles ci-dessous, dĂ©terminer les quatres coefficients du produit (a+bi+cj+dk)×(aâ€Č+bâ€Či+câ€Čj+dâ€Čk)(a + bi + cj + dk) \times (a' + b'i + c'j + d'k).
On pourra vĂ©rifier le rĂ©sultat en comparant avec l’implĂ©mentation de la multiplication des quaternions dans babylon.js.

Norme d’un quaternion

De façon analogue aux nombres complexes, on dĂ©finit le conjuguĂ© de qq, qˉ=a−bi−cj−dk{\bar{q} = a - bi - cj - dk}, et je vous laisse vĂ©rifier l’égalité : qqˉ=a2+b2+c2+d2{q\bar{q} = a^2 + b^2 + c^2 + d^2}

On dĂ©finit Ă©galement la norme ∣q∣=qqˉ=a2+b2+c2+d2{\vert q \vert = \sqrt{q\bar{q}} = \sqrt{a^2 + b^2 + c^2 + d^2}}

La norme des quaternions est multiplicative : ∣q1q2∣=∣q1∣∣q2∣\vert q_1 q_2 \vert = \vert q_1 \vert \vert q_2 \vert.

Si qq est un quaternion non nul, on a alors qqˉ∣q∣2=1{\cfrac{q \bar{q}}{{\vert q \vert}^2} = 1}, ce qui permet de dĂ©finir l’inverse de qq, de façon analogue aux nombres complexes : q−1=qˉ∣q∣2{q^{-1} = \cfrac{\bar{q}}{{\vert q \vert}^2}}.

Rotations dans l’espace

On appelle rotation une transformation de l’espace qui prĂ©serve l’origine OO, la distance (euclidienne) entre les points et l’orientation. L’ensemble des rotations de l’espace Ă  trois dimensions est notĂ© SO(3)SO(3).

De façon plus intuitive, elles correspondent aux transformations qui font tourner un objet autour d’un point central sans le dĂ©former.

Les rotations de l’espace Ă  trois dimensions correspondent Ă  la donnĂ©e d’un axe de rotation et d’un angle.

Par exemple, la rotation associĂ©e Ă  la flĂšche de gauche ←\boxed{\leftarrow} dans l’animation du cube correspond Ă  une rotation de −π2-\frac{\pi}{2} autour de l’axe qui pointe vers le haut.

Cette caractĂ©risation des rotations est aujourd’hui bien connue, mais elle n’est pas Ă©vidente a priori. Euler l’a prouvĂ©e en 1776 par des arguments de gĂ©omĂ©trie sphĂ©rique.

Aujourd’hui, le formalisme de l’algĂšbre linĂ©aire permet d’aboutir Ă  ce rĂ©sultat par un calcul plus concis.

Ces deux preuves sont dĂ©taillĂ©es dans l’article Wikipedia consacrĂ©.

Non commutativitĂ© des rotations dans l’espace

ConsidĂ©rons le cube prĂ©sentĂ© en introduction — mais vous pouvez aussi faire l’expĂ©rience plus concrĂštement, par exemple en manipulant un dĂ© Ă  jouer.

Notons LL, RR, UU, DD (Left, Right, Up, Down) les rotations accessibles dans l’animation.

Elles correspondent Ă  des rotations d’un quart de tour autour de l’axe vertical (Left et Right) ou de l’axe horizontal de votre Ă©cran (Up et Down).

On peut effectuer ces opĂ©rations successivement, et l’on notera par exemple L⋅U⋅R{L \cdot U \cdot R} l’application successives des opĂ©rations RR, puis UU, puis LL.

Notons Ă©galement II la transformation identitĂ©, qui laisse le cube dans son Ă©tat d’origine.

On remarque alors que U⋅D=I{U \cdot D = I} et L⋅R=I{L \cdot R = I}, mais U⋅L⋅D⋅R≠I{U \cdot L \cdot D \cdot R \neq I} : la sĂ©quence Haut, Gauche, Bas, Droite ne ramĂšne pas le cube dans sa configuration d’origine.

Le phĂ©nomĂšne mis en Ă©vidence est la non commutativitĂ© des rotations dans l’espace, lorsque les axes de rotation ne sont pas confondus.

Rotations et quaternions

Une rotation peut ĂȘtre dĂ©crite par un axe de rotation donnĂ© par un vecteur directeur unitaire u→\overrightarrow{u}, et un angle Ξ\theta.

u→\overrightarrow{u} est lui-mĂȘme dĂ©fini par ses trois coordonnĂ©es (x,y,z)(x,y,z) vĂ©rifiant x2+y2+z2=1{x^2 + y^2 + z^2 = 1}.

Il est possible d’encoder l’ensemble de ces informations dans un quaternions de la façon suivante :

q=cos⁥(Ξ2)+sin⁥(Ξ2)(xi+yj+zk){q = \cos(\frac{\theta}{2}) + \sin(\frac{\theta}{2})(xi + yj + zk)}

On remarque que les quaternions associés à des rotations de cette façon sont unitaires :

∣q∣2=(cos⁥(Ξ2))2+(sin⁥(Ξ2))2(x2+y2+z2)=(cos⁥(Ξ2))2+(sin⁥(Ξ2))2=1{\vert q \vert}^2 = (\cos(\tfrac{\theta}{2}))^2 + (\sin(\tfrac{\theta}{2}))^2 (x^2 + y^2 + z^2) \\ = (\cos(\tfrac{\theta}{2}))^2 + (\sin(\tfrac{\theta}{2}))^2 \\ = 1

Les coefficients d’un tel quaternion dĂ©finissent de façon unique une rotation.

En revanche, la mĂȘme rotation est dĂ©crite par deux quaternions unitaires diffĂ©rents. Par exemple, la rotation identitĂ© — qui laisse les objets dans la mĂȘme position — peut ĂȘtre dĂ©crite par les quaternions suivant :

  • q0=(1,0,0,0)q_0 = (1, 0, 0, 0), en prenant Ξ=0\theta = 0
  • q1=(−1,0,0,0)q_1 = (-1, 0, 0, 0), en prenant Ξ=2π\theta = 2\pi

On peut le constater en faisant faire un tour complet au cube prĂ©sentĂ© en introduction depuis sa position d’origine dĂ©crite par le quaternion q0q_0.

AprĂšs une sĂ©quence ←,←,←,←{\boxed{\leftarrow}, \boxed{\leftarrow}, \boxed{\leftarrow}, \boxed{\leftarrow}} les coordonnĂ©es du quaternion correspondant — affichĂ©es sous le cube – sont diffĂ©rentes et correspondent Ă  q1q_1.

On peut effectuer un autre tour dans le mĂȘme sens pour retrouver le quaternion initial q0q_0.

On peut encoder les rotations de l’espace à trois dimensions en utilisant des quaternions unitaires.
À toute rotation de l’espace correspond alors deux quaternions unitaires qui la dĂ©crivent.

Le produit des quaternions est compatible avec la composition des rotations : si qq et qâ€Čq' sont deux quaternions unitaires reprĂ©sentant des rotations, le quaternion qâ€Čqq' q reprĂ©sente l’application successive de ces deux rotations.

DĂšs lors, on peut dĂ©jĂ  rapprocher la non-commutativitĂ© du produit des quaternions et la non commutativitĂ© des rotations de l’espace


On montre par ailleurs que si l’on encode un vecteur (a,b,c)(a, b, c) de l’espace Ă  trois dimensions sous la forme d’un quaternion p=ai+bj+ckp = ai + bj +ck, alors le produit qpq−1qpq^{-1} donne le rĂ©sultat de l’application de la rotation associĂ©e Ă  qq au vecteur reprĂ©sentĂ© par pp.

đŸ’» Utilisation des quaternions

Les quaternions sont utilisĂ©s dans la plupart des moteurs 3D afin de reprĂ©senter la rotation d’un solide par rapport Ă  un repĂšre initial.

Par exemple, les frameworks babylon.js et three.js, qui permettent de faire de la 3D dans la navigateur en utilisant le standard WebGL se basent sur des quaternions pour leur représentation interne des rotations.

L’API de babylon.js permet de spĂ©cifier une rotation par son axe et son angle, ou par les angles d’Euler — qui permettent de dĂ©finir un repĂšre en mouvement avec le solide.

Quelle que soit la méthode utilisée, la représentation interne reste cependant un quaternion.

Le moteur de jeux vidĂ©os Unity cite les avantages suivant pour l’utilisation des quaternions (source) :

They are compact, don’t suffer from gimbal lock and can easily be interpolated. Unity internally uses Quaternions to represent all rotations.

La compacitĂ© de la reprĂ©sentation est principalement liĂ©e au fait que seuls quatre flottants soient nĂ©cessaires pour reprĂ©senter une rotation. Plus de dĂ©tails sur la comparaison des opĂ©rations de rotation dans les diffĂ©rentes reprĂ©sentations sont donnĂ©s dans l’article Wikipedia Ă  ce sujet.

Blocage de cardan

Le problùme du blocage de cardan (gimbal lock) correspond à l’observation suivante :

  • autour d’une position donnĂ©e, un solide peut effectuer des rotations selon trois degrĂ©s de libertĂ©, qui correspondent Ă  des rotations autour de chacun des trois axes
  • certaines reprĂ©sentations, comme celle associĂ©e aux angles d’Euler, amĂšnent parfois le solide dans un Ă©tat oĂč un degrĂ© de libertĂ© est perdu : lorsque deux axes de rotation coincident

La représentation par les quaternions unitaires ne présente pas ce problÚme.

Interpolation d’une rotation

Comment passer d’une rotation à une autre de façon continue, en parcourant une distance minimale ?

Cette problĂ©matique correspond Ă  ce que l’on appelle l’interpolation linĂ©aire sphĂ©rique (ou Slerp) et se pose dans les moteurs 3D pour gĂ©nĂ©rer une animation entre deux rotations diffĂ©rentes.

Si les deux rotations sont spĂ©cifiĂ©es par des quaternions q0q_0 et q1q_1, il est possible de le faire en considĂ©rant pour 0≀t≀1{0 \leq t \leq 1} le quaternion q0(q0−1q1)t{q_0(q_0^{-1}q_1)^t}.

Cette formule nĂ©cessite d’avoir dĂ©fini une notion d’exponentielle, qui gĂ©nĂ©ralise l’exponentielle rĂ©elle ou complexe et dont la justification nĂ©cessite l’étude des groupes et algĂšbres de Lie, que nous Ă©voquerons briĂšvement.

Dans l’animation du cube, nous utilisons la mĂ©thode Quaternion.Slerp pour gĂ©nĂ©rer les transitions entre les diffĂ©rentes rotations.

💡 Le revĂȘtement double de SO(3)SO(3)

La suite de cette entrĂ©e, plus avancĂ©e, vise Ă  donner un Ă©clairage sur l’origine des quaternions et leur lien avec les rotations de l’espace.

Dimension de SO(n)SO(n)

Dans un espace de dimension nn avec une base orthonormĂ©e fixĂ©e, les isomĂ©tries qui fixent l’origine sont dĂ©crites par des matrices orthogonales, qui forment un ensemble notĂ© O(n)O(n).

La relation MMâŠș=IMM^{\intercal} = I est symĂ©trique. Elle correspond Ă  n(n+1)/2n(n+1)/2 Ă©quations qui sont autant de contraintes sur les coefficients de MM.

L’ensemble des matrices obtenues constitue donc une variĂ©tĂ© (au sens de la gĂ©omĂ©trie diffĂ©rentielle) de dimension n2−n(n+1)/2=n(n−1)/2n^2 - n(n+1)/2 = {n(n-1)}/2.

Ces transformations ont un dĂ©terminant Ă©gal Ă  11 ou −1-1 suivant qu’elles conservent ou inversent l’orientation. Le groupe SO(n)SO(n) des rotations correspond au cas det⁥(M)=1\det(M) = 1.

On a par exemple I∈SO(n)I \in SO(n) et l’on peut paramĂ©trer localement SO(n)SO(n) Ă  l’aide de n(n−1)/2{n(n-1)}/2 variables.

On dit que SO(n)SO(n) est un groupe de Lie de dimension n(n−1)2\cfrac{n(n-1)}{2}.

Cas n=2n = 2

On a alors n(n−1)2=1\cfrac{n(n-1)}{2} = 1.

L’ensemble SO(2)SO(2) des rotations du plan et le cercle unitĂ© S1S^1 (notation de la 1-sphere) ont mĂȘme dimension. On montre mĂȘme qu’ils sont homĂ©omorphes, ce que l’on notera S1≃SO(2){S^1 \simeq SO(2)}.

C’est cette identification qui nous permet de munir R2≃R+×S1≃R+×SO(2)\R^2 \simeq \R^+ \times S^1 \simeq \R^+ \times SO(2) de la multiplication complexe.

Cas n=3n = 3

On a alors n(n−1)2=3\cfrac{n(n-1)}{2} = 3.

L’ensemble SO(3)SO(3) des rotations de l’espace forme une variĂ©tĂ© de dimension 33 (c’est par exemple pour cela qu’il y a trois angles d’Euler).

La sphĂšre S3S^3 de l’espace Ă  quatre dimensions est Ă©galement une variĂ©tĂ© de dimension 33 qui correspond aux quaternions unitaires.

En encodant une rotation dans un quaternion unitaire, on obtient la correspondance S3≃SO(3)×{−1,1}{S^3 \simeq SO(3) \times \{-1, 1\}}. Les points de S3S^3 forment du point de vue topologique un revĂȘtement double de l’ensemble des rotations de l’espace.

On a alors l’identification R4≃R+×S3≃R+×SO(3)×{−1,1}\R^4 \simeq \R^+ \times S^3 \simeq \R^+ \times SO(3) \times \{-1, 1\}.

C’est cette identification qui nous permet de munir R4\R^4 d’un produit pour construire les quaternions.

Elle met en Ă©vidence le lien avec les rotations de l’espace Ă  trois dimensions, qui est plus subtil que le lien entre les complexes et les rotations du plan


Rotations et revĂȘtements

On peut voir les rotations du plan et de l’espace comme des structures dĂ©finies par des quotients d’un groupe de Lie par un sous-ensemble qui possĂšde une forme de rĂ©gularitĂ© (techniquement, un sous-groupe discret).

SO(2)≃R/2πZSO(3)≃S3/{−1,1}SO(2) \simeq \R / {2\pi\Z} \\ SO(3) \simeq S^3 / \{-1, 1\}

Les groupes de rotations SO(2)SO(2) et SO(3)SO(3) apparaissent alors comme les images d’ensembles plus grands dont on aurait « oublié » des informations.

L’application t→exp⁥(it)t \to \exp(it) dĂ©finit par exemple un revĂȘtement du cercle unitĂ© (ou de SO(2)SO(2)) par R\R, comme l’illustre la figure ci-dessous :

RevĂȘtement du cercle unitĂ©

Dans ce cas, ce revĂȘtement fait apparaĂźtre l’infinitĂ© de rĂ©els dĂ©crivant une rotation donnĂ©e.

Concernant SO(3)SO(3), on a un revĂȘtement par les quaternions unitaires et ce revĂȘtement possĂšde une propriĂ©tĂ© commune avec celui du cercle par les rĂ©els : c’est un revĂȘtement par un espace simplement connexe.

La subtilitĂ© est que dans ce cas une rotation n’est pas dĂ©crite par une infinitĂ© de quaternions unitaires, mais seulement par deux. Le passage de S3S^3 Ă  SO(3)SO(3) correspond en effet Ă  identifier les points antipodaux.

Une bonne comprĂ©hension de ces notions demande de s’intĂ©resser Ă  la notion d’algĂšbre de Lie associĂ©e Ă  un groupe de Lie.

Le groupe des quaternions unitaires apparaĂźt alors comme un cas particulier de groupe de Lie, qui partage avec SO(3)SO(3) la mĂȘme algĂšbre de Lie. Il s’agit de son revĂȘtement universel



Vous pouvez commenter cette entrée sur Bluesky, Twitter ou Mathstodon.
N'hésitez pas également à m'envoyer un email (thomas@lipsum.dev).

Maths et applications, avec les mains et avec du code đŸ’»
Twitter  â–Ș  Bluesky  â–Ș  À propos