Qu'est-ce qu'un quaternion ?
Votre téléphone sait toujours dans quelle direction il pointe. Inclinez-le, et l’écran pivote avec vous ; levez-le dans une expérience de réalité augmentée, et l’objet virtuel reste posé sur la table pendant que le téléphone tourne autour. Chacune de ces images part de la même question : comment le téléphone est-il orienté dans l’espace, en ce moment précis ?
La réponse que votre navigateur transmet à la page n’est ni trois angles, ni une grille de neuf nombres. Ce sont quatre nombres : un quaternion. Ces mêmes quatre nombres orientent chaque tache d’une scène en Gaussian splatting, chaque os d’un personnage animé et le contrôle d’attitude de chaque engin spatial.
Un quaternion a des airs de magie en quatre dimensions. Il n’en est rien, ou du moins il n’est pas nécessaire de se représenter quatre dimensions pour s’en servir. Ce guide le construit pas à pas, de la rotation dans un plan aux quatre nombres eux-mêmes, en passant par le piège des trois angles, avec à chaque étape une figure à manipuler.
Tourner dans un plan : un seul angle suffit
En deux dimensions, une rotation se résume à un seul nombre : un angle. Faites tourner un téléphone posé à plat de 30°, puis de 20° : il a tourné de 50°. L’ordre n’a aucune importance, et rien ne peut mal tourner.
Il existe une manière élégante de l’écrire. Posez le téléphone sur le plan complexe, où chaque point est un nombre a + b i. Les points à distance 1 du centre forment le cercle unité, et chacun s’écrit cos θ + i sin θ. Multiplier par ce nombre fait tout tourner de θ. Multipliez par i lui-même, et vous obtenez un quart de tour ; faites-le deux fois, i² = −1, et c’est un demi-tour.
Un seul angle suffit
r = 0,87 + 0,50 i · angle 30°
Le plan complexe et son cercle unité, avec un téléphone vu de dessus. Le point sur le cercle vaut cos θ + i sin θ ; multiplier par ce nombre fait tourner le téléphone de θ. Multiplier par i le fait tourner d’un quart de tour.
Faites glisser le point le long du cercle ou utilisez le curseur. Le nombre r représente toute la rotation, écrite comme un seul nombre complexe de longueur 1. Multiplier deux de ces nombres additionne leurs angles, dans un ordre comme dans l’autre.
Gardez cette image en tête. Un quaternion, c’est exactement cette idée, une dimension plus haut : un nombre dont la multiplication effectue une rotation. Ce qui complique les choses en trois dimensions, c’est qu’il n’existe plus un seul cercle le long duquel tourner.
Trois angles : lacet, tangage et roulis
La façon naturelle de décrire une orientation en 3D est d’utiliser trois angles, un par axe. Les pilotes parlent de lacet, de tangage et de roulis ; les mathématiciens, d’angles d’Euler, du nom de Leonhard Euler, qui a démontré en 1775 qu’on passe de n’importe quelle orientation à n’importe quelle autre par une seule rotation autour d’un seul axe.
Les angles que donne votre téléphone
Il existe une douzaine de façons de définir trois angles, selon les axes autour desquels on tourne et l’ordre dans lequel on le fait. Les navigateurs utilisent une convention précise, fixée par la spécification DeviceOrientation du W3C :
- α (alpha), le lacet : une rotation autour de l’axe vertical, comme un cap de boussole ;
- β (bêta), le tangage : une rotation autour de l’axe gauche-droite du téléphone lui-même. À β = 0°, le téléphone est à plat, écran vers le haut ; à β = 90°, il est tenu droit, face à vous ;
- γ (gamma), le roulis : une rotation autour de l’axe haut-bas du téléphone.
Elles s’appliquent dans cet ordre, chacune autour des axes laissés par les précédentes. Mécaniquement, imaginez le téléphone monté dans trois anneaux imbriqués, ce que les ingénieurs appellent une suspension à cardan.
Le blocage de cardan
Trois angles, trois anneaux
- Anneau de lacet, autour de la verticale
- Anneau de tangage
- Anneau de roulis, qui porte le téléphone
- La direction autour de laquelle aucun anneau ne peut tourner
Lacet −35°, tangage 60°, roulis 20°
Un téléphone monté dans trois anneaux imbriqués : le lacet autour de la verticale (bleu), le tangage (ambre) et le roulis (vert), les angles qu’un navigateur donne pour un téléphone. À un tangage de 90°, téléphone tenu droit, l’anneau ambre se couche dans le plan de l’anneau bleu : lacet et roulis tournent autour du même axe, et une direction de rotation est perdue.
Jouez avec les trois curseurs, puis appuyez sur « Tangage à 90° ». L’anneau ambre se replie dans le plan de l’anneau bleu, et les curseurs de lacet et de roulis font désormais la même chose. Appuyez ensuite sur « Tourner comme un volant » : le téléphone tourne en douceur, et pourtant les angles font des bonds.
À un tangage d’exactement 90°, le premier et le troisième anneau s’alignent. Tourner l’anneau extérieur ou l’anneau intérieur fait alors pivoter le téléphone autour du même axe vertical ; seule leur combinaison compte encore. Un degré de liberté a disparu : il existe une direction dans laquelle aucun anneau ne peut faire tourner le téléphone. C’est le blocage de cardan (gimbal lock en anglais).
L’orientation elle-même n’a rien d’anormal. Le problème vient de la description : autour de cette position, un petit mouvement régulier de l’objet exige des variations énormes et brutales des angles. Dans la figure, tourner de 20° comme un volant le téléphone tenu droit fait basculer le lacet et le roulis de 90° en sens opposés. Tout logiciel qui stocke des angles d’Euler, les interpole ou les filtre pour en retirer le bruit bute précisément à cet endroit.
Le blocage de cardan n’est pas qu’une curiosité de manuel. La plateforme inertielle des vaisseaux Apollo comptait trois cardans, et les contrôleurs de vol devaient éviter l’orientation bloquante ; un astronaute a d’ailleurs plaisanté en demandant qu’on lui offre un quatrième cardan pour Noël.
Pourquoi la réalité augmentée y tombe tous les jours
Relisez la convention : β = 90°, c’est le téléphone tenu droit, écran face à vous. C’est exactement ainsi qu’on tient un téléphone en réalité augmentée. La position la plus courante en RA est précisément la position de blocage des angles que donne le navigateur. Un moteur de RA qui calculerait en α, β et γ tremblerait dès que vous lèveriez votre téléphone. C’est l’une des raisons pour lesquelles les moteurs de RA font leurs calculs en quaternions.
Les quatre nombres d’Hamilton
Le 16 octobre 1843, en longeant le Royal Canal à Dublin, le mathématicien irlandais William Rowan Hamilton trouve ce qu’il cherchait depuis des années : une manière de multiplier des triplets de nombres comme les nombres complexes multiplient des paires. La réponse ne demandait pas trois nombres, mais quatre. Il grave la règle dans la pierre du pont de Broom (Brougham Bridge), où une plaque la rappelle encore :
i² = j² = k² = ijk = −1
Un quaternion est un nombre w + x i + y j + z k, avec une partie ordinaire w et trois unités imaginaires qui se multiplient entre elles ainsi :
| × | i | j | k | |---|---|---|---| | i | −1 | k | −j | | j | −k | −1 | i | | k | j | −i | −1 |
Le tableau réserve une surprise : ij = k, mais ji = −k. L’ordre d’un produit compte. Ce n’est pas un défaut : comme on va le voir, les rotations en 3D se comportent exactement de la même manière.
Un axe et un angle
Le théorème d’Euler dit que toute orientation s’obtient par une seule rotation d’un certain angle θ autour d’un certain axe u. Un quaternion écrit directement cette rotation :
q = ( cos θ/2 , sin θ/2 · u )
Le premier nombre, w, dit de combien on tourne ; les trois autres sont l’axe u, multiplié par sin θ/2 : ils pointent le long de l’axe. Comme l’axe est de longueur 1, les quatre nombres vérifient toujours w² + x² + y² + z² = 1 : une rotation est un point sur la sphère unité à quatre dimensions, tout comme une rotation en 2D était un point sur le cercle unité.
Un axe et un angle deviennent quatre nombres
Faites glisser sur la sphère pour choisir l’axe
w² + x² + y² + z² = 1,000
Un tour complet : le téléphone est revenu à son point de départ, et pourtant q = (−1, 0, 0, 0). Même orientation, signe opposé — nous y revenons plus bas.
À gauche, l’axe de rotation, représenté par un point sur une sphère ; à droite, le téléphone tourné autour de cet axe. En dessous, les quatre nombres du quaternion : le cosinus de la moitié de l’angle, puis l’axe multiplié par le sinus de la moitié de l’angle. Leur longueur vaut toujours 1.
Choisissez un axe en faisant glisser sur la sphère ou avec les axes prédéfinis, et un angle avec le curseur. Le réglage par défaut, un tiers de tour autour de la diagonale, donne quatre nombres égaux : q = (½ ; ½ ; ½ ; ½). Poussez l’angle jusqu’à 360° et regardez le signe de w.
Pourquoi la moitié de l’angle ?
La formule utilise θ/2, et non θ, et la figure en montre une conséquence : après un tour complet, q = (−1, 0, 0, 0) et non (1, 0, 0, 0). La raison apparaît dès qu’on se sert d’un quaternion pour faire tourner quelque chose.
Faire tourner un point : q p q⁻¹
Pour faire tourner un point p = (x, y, z), on l’écrit comme un quaternion sans partie ordinaire, (0, x, y, z), et on calcule un « sandwich » :
p′ = q p q⁻¹
où q⁻¹, l’inverse, est q dont on a changé le signe des trois derniers nombres. Par exemple, faire tourner le point (1, 0, 0) de 90° autour de l’axe vertical utilise q = (0,707 ; 0 ; 0 ; 0,707) et donne p′ = (0, 0, 1, 0) : le point (0, 1, 0), exactement là où l’amène un quart de tour.
Faire tourner un point : q p q⁻¹
Le quatrième nombre, w, est la part qui sort de nos trois dimensions.
Le second produit achève la rotation et ramène w à 0 : le point a tourné de l’angle complet.
| Étape | w | x | y | z |
|---|---|---|---|---|
| p = (0, x, y, z) | 0,000 | 1,000 | 0,000 | 0,000 |
| q · p | 0,000 | 0,707 | 0,707 | 0,000 |
| q · p · q⁻¹ | 0,000 | 0,000 | 1,000 | 0,000 |
- Le long de l’axe
- Perpendiculaire à l’axe
Un point tourne de 90° autour de l’axe vertical en trois temps : écrit comme un quaternion, multiplié par q à gauche, puis par q⁻¹ à droite. La flèche magenta est la partie vectorielle de chaque produit ; la jauge montre w, la part qui sort de nos trois dimensions.
Avancez étape par étape. Avec le point perpendiculaire à l’axe, le premier produit ne le fait tourner qu’à moitié. Inclinez maintenant le point vers l’axe et recommencez : après le premier produit, w n’est plus nul.
La figure montre pourquoi un seul produit ne suffit pas. Décomposez le point en une partie le long de l’axe et une partie perpendiculaire :
- perpendiculairement à l’axe, chacun des deux produits fait tourner le point de θ/2. Ensemble, ils le font tourner de θ, exactement comme la multiplication par cos θ + i sin θ dans le plan ;
- le long de l’axe, le premier produit pousse le point dans w, hors de nos trois dimensions, et le second l’y ramène intact.
Chaque multiplication fait la moitié du travail : voilà pourquoi l’angle est divisé par deux dans q. Et le sandwich annule tout ce qui fuit dans la quatrième dimension, si bien que le résultat est toujours un vrai point en 3D.
Ce que les quaternions font bien
Des rotations dans le bon ordre
En 3D, les rotations ne commutent pas : un quart de tour vers l’avant puis un quart de tour sur le côté n’aboutit pas au même endroit que les deux mêmes rotations dans l’ordre inverse. Essayez avec un livre posé sur votre bureau. La multiplication des quaternions a exactement la même propriété : combiner des rotations revient donc simplement à multiplier leurs quaternions, qB qA signifiant « A d’abord, puis B ».
L’ordre des rotations compte
A, puis B
q = (0,50 ; 0,50 ; 0,50 ; 0,50)
B, puis A
q = (0,50 ; 0,50 ; -0,50 ; 0,50)
Les deux mêmes rotations, un résultat différent : en 3D, les rotations ne commutent pas, et les quaternions non plus.
Les rotations se font autour des axes fixes dessinés sous chaque téléphone (x ambre, y vert, z bleu).
Deux quarts de tour appliqués dans les deux ordres. Chaque ligne montre le téléphone au départ, après la première rotation et après la seconde. Les deux ordres aboutissent à des orientations différentes, et les deux quaternions diffèrent.
Choisissez les deux rotations, puis lancez les deux ordres. Avec A = 90° autour de x et B = 90° autour de z, les deux résultats ne diffèrent que par le signe d’un seul nombre, et pourtant les écrans ne regardent pas dans la même direction.
Des transitions fluides : le slerp
L’animation, les trajectoires de caméra et le suivi en RA ont tous besoin d’orientations entre deux orientations connues. Avec les angles d’Euler, la méthode évidente, faire la moyenne des trois angles, déraille dès que les positions sont proches du blocage ou de part et d’autre de la limite des 180° d’un angle : l’objet fait un immense détour, en accélérant et en ralentissant en chemin.
Les quaternions ont une réponse nette : le slerp (spherical linear interpolation), introduit par Ken Shoemake pour l’animation par ordinateur en 1985. Il avance le long du grand arc qui relie les deux quaternions sur leur sphère, à vitesse constante, ce qui revient à tourner autour d’un seul axe fixe à un rythme régulier : le chemin le plus court et le plus fluide d’une orientation à l’autre.
Passer d’une orientation à une autre
Moyenne des angles : 179° parcourus, 359° au total
Slerp : 10° parcourus, 20° au total
Deux téléphones vont d’une même orientation à une autre : à gauche en faisant la moyenne de leurs angles d’Euler, à droite par slerp. En dessous, le chemin suivi par une direction du téléphone sur une sphère, avec un point à chaque dixième du temps.
Choisissez un couple d’orientations et faites défiler le temps. Dans « Presque vertical », les deux positions ne sont séparées que de 20°, mais la moyenne des angles fait tourner le téléphone de 359°. Décochez « Prendre le plus court chemin » pour voir le slerp passer par le long chemin.
Un tour complet n’est pas tout à fait rien : q et −q
À cause de la moitié de l’angle, q et −q décrivent toujours la même orientation : changer le signe des quatre nombres ajoute 360° à la rotation, ce qui ne change rien à ce qu’on voit. Chaque orientation a donc exactement deux quaternions. Les logiciels doivent s’en souvenir à deux endroits : le slerp doit choisir, entre q et −q, le plus proche avant d’interpoler (la case à cocher ci-dessus), et deux quaternions doivent être comparés au signe près.
Cette double couverture n’est pas un accident de notation. Elle traduit une vraie propriété des rotations en 3D : une rotation de 360° n’équivaut pas tout à fait à ne rien faire, alors qu’une rotation de 720°, si. On peut le vérifier avec une ceinture attachée à un livre, ou une tasse posée dans la paume de la main : après un tour complet, le bras ou la ceinture est tordu, et après un second tour dans le même sens, il se détord tout seul.
Pourquoi un tour complet n’est pas tout à fait rien
Téléphone : q = (−1,00 ; 0,00 ; 0,00 ; 0,00)
Le téléphone ne tourne pas : il se déplace seulement, et le ruban fait une boucle. La torsion change de sens, mais ne disparaît pas.
Un ruban relie le téléphone à une pince fixe. Faites faire un tour au téléphone : le ruban est tordu, et on a beau déplacer ensuite le téléphone sans le faire tourner, la torsion ne s’en va pas. Faites-lui faire deux tours dans le même sens : le ruban peut revenir à plat. La jauge montre w, le premier nombre du quaternion du téléphone : −1 après un tour, +1 après deux.
Essayez les deux modes. Pendant la phase du milieu, le téléphone ne tourne jamais : il se déplace seulement, comme votre main dans l’astuce de la tasse. Après un tour, le ruban reste tordu quoi que vous fassiez ; après deux, il revient à plat. Cette différence est exactement celle qui sépare q = −1 de q = +1, alors que le téléphone a le même aspect dans les deux cas.
Les erreurs d’arrondi : quatre nombres se réparent mieux que neuf
Une matrice de rotation stocke une orientation sous forme de neuf nombres, qui doivent rester des vecteurs unitaires perpendiculaires entre eux. Multipliez des milliers de petites rotations entre elles, une par image, pendant des minutes, et les erreurs d’arrondi finissent par casser cette structure : la matrice se met à étirer et à cisailler l’objet. La réparer (la réorthogonaliser, par exemple par Gram-Schmidt) demande un vrai calcul.
Dix mille petites rotations
Le téléphone pâle derrière chacun est l’orientation exacte.
10 000 rotations de 0,7°
Matrice : écart à une vraie rotation 2,32, volume × 4,63
Quaternion : à 30,82° de l’orientation exacte, et toujours une rotation rigide
La même petite rotation appliquée des milliers de fois, avec des arrondis, comme le fait un programme à chaque image. À gauche, une matrice de rotation : ses neuf nombres dérivent et le téléphone dessiné avec elle se cisaille et gonfle. À droite, un quaternion divisé par sa longueur après chaque pas : le téléphone reste rigide. Le fantôme pâle derrière chaque téléphone est le résultat exact.
Lancez-le dans les deux précisions. En virgule flottante sur 32 bits, la précision habituelle des moteurs 3D, 10 000 rotations laissent la matrice décalée d’environ 2 × 10⁻⁴ : invisible, mais cela augmente, jusqu’à environ 2 % après un million. La demi-précision, courante dans les textures graphiques et les fichiers compacts, montre le même mécanisme bien plus vite : après 10 000 rotations, la matrice a plus que quadruplé de volume. Le quaternion, renormalisé après chaque pas, n’est pas exact non plus (il finit décalé d’environ 30° en demi-précision), mais il reste un téléphone rigide.
Un quaternion n’a qu’une propriété à préserver : sa longueur de 1. Quand il dérive, diviser les quatre nombres par leur longueur redonne une rotation parfaite. Ce n’est peut-être pas exactement la bonne, puisque les erreurs d’arrondi sont toujours là, mais c’est toujours une rotation rigide, jamais une déformation.
Les quaternions chez ARGO
Dans chaque Gaussian splat
Une scène en Gaussian splatting se compose de centaines de milliers, voire de millions de petits ellipsoïdes, et l’orientation de chacun est stockée sous forme de quaternion : quatre des 59 nombres qui décrivent une gaussienne. Pour un million de gaussiennes, cela représente 16 Mo en nombres flottants de 32 bits, contre 36 Mo avec des matrices de rotation. Pendant l’entraînement, l’optimiseur ajuste librement ces quatre nombres puis les renormalise, ce qu’il ne pourrait pas faire avec neuf nombres soumis à des contraintes.
Notre propre visionneuse en direct, dans cet article, va plus loin et range chaque quaternion sur 3 octets : puisque q et −q sont la même rotation, on peut toujours choisir le signe qui rend w positif, et w se recalcule alors à partir des trois autres.
Le quaternion de chaque gaussienne
La gaussienne en 3D
Son empreinte à l’écran
- Son empreinte à l’écran
- Reconstruite à partir des 3 octets stockés
Stocké : A4 B1 EA (3 octets) · w reconstruit : 0,264
La rotation reconstruite est décalée de 0,78°
Ici, w était négatif : le quaternion stocké est −q, la même rotation, pour que w ≥ 0.
Pour un million de gaussiennes : 16 Mo sous forme de quatre nombres de 32 bits, 36 Mo en matrices de rotation, 3 Mo dans notre visionneuse.
À gauche, une gaussienne 3D d’une scène en Gaussian splatting, tournée autour de l’axe magenta. À droite, ce que dessine un moteur de splatting : son empreinte à l’écran. En pointillé, la même empreinte reconstruite à partir des 3 octets que notre visionneuse stocke pour le quaternion ; les valeurs affichées donnent les octets et l’erreur qu’ils introduisent.
Faites tourner la gaussienne et observez l’erreur de la version sur 3 octets. Sur l’ensemble des rotations possibles, elle est de 0,6° en moyenne et d’environ 11° au pire : moins de 1° pour toute rotation inférieure à 90°, et maximale près de 180°, là où w est proche de zéro et où le recalculer à partir des trois autres amplifie leurs arrondis. D’autres formats l’évitent en retirant le plus grand des quatre nombres plutôt que toujours w. À l’écran, un ellipsoïde garde en outre le même aspect après un demi-tour autour de l’un de ses axes : la différence visible est souvent plus faible encore.
Dans votre téléphone et dans WebXR
Sur le web, l’orientation d’un téléphone arrive de deux façons. Les événements DeviceOrientation fournissent les trois angles α, β et γ, avec tous les problèmes décrits plus haut. L’API WebXR, utilisée pour la réalité augmentée et virtuelle dans le navigateur, fournit directement la position de l’appareil sous forme de quaternion (XRRigidTransform.orientation), et les bibliothèques 3D comme three.js calculent en quaternions en interne. Nos projets de WebAR reposent sur ces quatre nombres à chaque image. Notre travail part de la position du téléphone ; pour savoir comment cette position est suivie en premier lieu, voyez notre article sur AMB3R-SLAM.
Votre téléphone, en direct
α 20° · β 60° · γ −15°
q = (0,86 ; 0,51 ; −0,03 ; 0,08)
Tenez le téléphone droit, comme pour la réalité augmentée, puis passez-le en paysage : α et γ font des bonds, alors que les quatre nombres de q varient en douceur.
Faites glisser le modèle pour le tourner, ou utilisez les flèches du clavier une fois qu’il a le focus.
Le modèle de téléphone suit l’orientation de votre vrai téléphone, lue par ses capteurs de mouvement, avec les trois angles que donne le navigateur et le quaternion qui en est tiré. Sans capteurs, faites glisser le modèle ou réglez les trois angles.
Sur un téléphone, appuyez sur le bouton (un iPhone demande d’abord votre autorisation) et bougez-le dans tous les sens. Sur un ordinateur, faites glisser le modèle. Tenez le téléphone droit et faites-le tourner : les trois angles font des bonds à la position de blocage vue au début de cet article, alors que le quaternion évolue en douceur. Son signe est gardé continu d’un échantillon à l’autre, puisque q et −q sont la même orientation.
Un piège mérite d’être connu : l’ordre des quatre nombres. Cet article, le format de fichier du Gaussian splatting et une bonne partie de la littérature scientifique écrivent (w, x, y, z) ; three.js, WebXR, glTF et Unity stockent (x, y, z, w). Confondre les deux est le bug le plus courant avec les quaternions.
Pour les développeurs : des angles DeviceOrientation au quaternion
Les angles du W3C sont des rotations intrinsèques Z-X′-Y″ : le quaternion est donc le produit de trois rotations à demi-angle, qz(α) · qx(β) · qy(γ). Sous forme développée, dans l’ordre (w, x, y, z) :
// alpha, beta, gamma en degrés, tels que les donne DeviceOrientationEvent
function orientationToQuaternion(alpha, beta, gamma) {
const h = Math.PI / 360 // degrés vers radians, divisé par deux
const cz = Math.cos(alpha * h), sz = Math.sin(alpha * h)
const cx = Math.cos(beta * h), sx = Math.sin(beta * h)
const cy = Math.cos(gamma * h), sy = Math.sin(gamma * h)
return [
cx * cy * cz - sx * sy * sz, // w
sx * cy * cz - cx * sy * sz, // x
cx * sy * cz + sx * cy * sz, // y
cx * cy * sz + sx * sy * cz, // z
]
}Sur iOS, appelez DeviceOrientationEvent.requestPermission() depuis un gestionnaire de clic, en HTTPS. Sur Android, α est relatif à la position du téléphone au chargement de la page, sauf avec deviceorientationabsolute. Pour une caméra qui regarde à travers le téléphone, comme en RA, tournez aussi selon l’orientation de l’écran (screen.orientation.angle) autour de l’axe de visée. Le corps du téléphone, lui, n’en a jamais besoin. Les bibliothèques qui stockent (x, y, z, w), comme three.js, attendent le premier nombre en dernier.
Angles d’Euler, matrice ou quaternion ?
| | Angles d’Euler | Matrice de rotation | Quaternion | |---|---|---|---| | Nombres stockés | 3 | 9 | 4 | | Lisible par un humain | oui | non | pas vraiment | | Blocage de cardan | oui | non | non | | Combiner deux rotations | malcommode | multiplier (27 produits) | multiplier (16 produits) | | Interpolation fluide | non | malcommode | slerp | | Réparation après arrondi | — | réorthogonaliser | diviser par la longueur |
Chacun a sa place. Les angles d’Euler restent la meilleure façon de montrer une orientation à une personne, ou de la saisir. Les matrices sont ce que la carte graphique utilise au final pour transformer les sommets. Les quaternions sont la meilleure façon de stocker, combiner et interpoler les orientations entre les deux, et c’est pourquoi presque tous les moteurs 3D les gardent à cet endroit.
Questions fréquentes
Qu’est-ce qu’un quaternion, en termes simples ?
Quatre nombres qui décrivent une rotation en 3D : le premier indique de combien l’objet tourne (le cosinus de la moitié de l’angle), les trois autres autour de quel axe (l’axe multiplié par le sinus de la moitié de l’angle). Mathématiquement, c’est un nombre avec une partie ordinaire et trois parties imaginaires, inventé par William Rowan Hamilton en 1843.
Pourquoi les quaternions utilisent-ils la moitié de l’angle ?
Parce qu’on fait tourner un point en le multipliant deux fois, une fois par q à gauche et une fois par son inverse à droite (q p q⁻¹). Chaque multiplication fait tourner le point de la moitié de l’angle, et les deux ensemble donnent la rotation complète.
Qu’est-ce que le blocage de cardan, et les quaternions l’évitent-ils ?
Le blocage de cardan survient avec trois angles quand celui du milieu atteint 90° : deux des trois axes s’alignent, et une direction de rotation ne peut plus être décrite en douceur. C’est un défaut de la description, pas de l’objet. Les quaternions n’ont pas d’orientation particulière de ce genre : ils l’évitent complètement.
Pourquoi q et −q décrivent-ils la même rotation ?
Changer le signe des quatre nombres ajoute un tour complet de 360° à la rotation, à cause de la moitié de l’angle. Un tour complet ramène l’objet à sa place : les deux quaternions donnent donc la même orientation. Les programmes en tiennent compte pour comparer ou interpoler des quaternions.
Quaternion, angles d’Euler ou matrice de rotation : lequel utiliser ?
Les angles d’Euler pour afficher ou saisir une orientation, les matrices pour transformer beaucoup de points sur la carte graphique, les quaternions pour stocker, combiner et interpoler les orientations entre les deux. La plupart des moteurs 3D passent sans cesse de l’un à l’autre.
Comment obtenir le quaternion d’un téléphone dans une page web ?
Avec WebXR, la position de l’appareil contient déjà un quaternion (orientation, dans l’ordre x, y, z, w). Avec les événements DeviceOrientation, vous recevez trois angles α, β et γ, que vous convertissez vous-même en appliquant les trois rotations dans l’ordre Z, X, Y. Sur iPhone, la page doit d’abord demander à l’utilisateur l’autorisation de lire les capteurs de mouvement.
Sources et lectures complémentaires
- William Rowan Hamilton, On Quaternions; or on a new System of Imaginaries in Algebra, Philosophical Magazine, 1844-1850 — transcription, Trinity College Dublin
- Olinde Rodrigues, Des lois géométriques qui régissent les déplacements d’un système solide dans l’espace, Journal de mathématiques pures et appliquées, 1840 — Numdam. Trois ans avant Hamilton, le mathématicien français avait déjà trouvé la formule qui compose deux rotations.
- Ken Shoemake, Animating Rotation with Quaternion Curves, SIGGRAPH 1985 — ACM Digital Library
- W3C, DeviceOrientation Event Specification et WebXR Device API
- Grant Sanderson (3Blue1Brown) et Ben Eater, Visualizing quaternions, une exploration interactive de l’image en quatre dimensions (en anglais)
- Kerbl, Kopanas, Leimkühler, Drettakis, 3D Gaussian Splatting for Real-Time Radiance Field Rendering, SIGGRAPH 2023 — arXiv:2308.04079
- Sreenivasan Rajesh Venkitachalam, Quaternions Explained: 3D Rotation and Their Role in 3DGS, LinkedIn, 16 septembre 2026 — linkedin.com, l’article qui a inspiré celui-ci
Vérifié en septembre 2026.