Pourquoi les quaternions sont-ils utilisés pour les rotations?

107

Je suis physicien, j'ai appris la programmation et j'ai rencontré beaucoup de gens utilisant des quaternions pour les rotations au lieu d'écrire des choses sous forme de matrice / vecteur.

En physique, il y a de très bonnes raisons pour lesquelles nous n'utilisons pas les quaternions (malgré l'histoire bizarre qui est parfois racontée à propos de Hamilton / Gibbs / etc.). La physique exige que nos descriptions aient un bon comportement analytique (cela a une signification précisément définie, mais de certaines manières plutôt techniques qui vont bien au-delà de ce qui est enseigné dans les classes d'introduction normales, donc je n'entrerai pas dans les détails). Il s'avère que les quaternions n'ont pas ce comportement agréable, et donc ils ne sont pas utiles, et les vecteurs / matrices en ont, donc nous les utilisons.

Cependant, restreintes aux rotations rigides et aux descriptions qui n'utilisent aucune structure analytique, les rotations 3D peuvent être décrites de manière équivalente dans les deux sens (ou de quelques autres manières).

Généralement, nous voulons juste une application d'un point X = (x, y, z) à un nouveau point X '= (x', y ', z') soumis à la contrainte que X 2 = X ' 2 . Et il y a beaucoup de choses qui font cela.

La manière naïve est de simplement dessiner les triangles que cela définit et d'utiliser la trigonométrie, ou d'utiliser l'isomorphisme entre un point (x, y, z) et un vecteur (x, y, z) et la fonction f (X) = X 'et une matrice MX = X ', ou en utilisant des quaternions, ou en projetant des composants de l'ancien vecteur le long du nouveau en utilisant une autre méthode (x, y, z) T. (a, b, c) (x', y ', z '), etc.

D'un point de vue mathématique, ces descriptions sont toutes équivalentes dans ce cadre (en tant que théorème). Ils ont tous le même nombre de degrés de liberté, le même nombre de contraintes, etc.

Alors pourquoi les quaternions semblent-ils préférés aux vecteurs?

Les raisons habituelles que je vois sont l'absence de verrouillage de la nacelle ou des problèmes numériques.

L'argument sans gimbal lock semble étrange, car il ne s'agit que d'un problème d'angles d'euler. Ce n'est également qu'un problème de coordonnées (tout comme la singularité à r = 0 en coordonnées polaires (le jacobien perd son rang)), ce qui signifie que ce n'est qu'un problème local, et peut être résolu en changeant de coordonnées, en tournant hors de la dégénérescence, ou en utilisant deux systèmes de coordonnées qui se chevauchent.

Je suis moins sûr des problèmes numériques, car je ne sais pas en détail comment ces deux (et toutes les alternatives) seraient implémentés. J'ai lu que la normalisation d'un quaternion est plus facile que de le faire pour une matrice de rotation, mais ce n'est vrai que pour une matrice générale; une rotation a des contraintes supplémentaires qui banalisent cela (qui sont intégrées dans la définition des quaternions) (en fait, cela doit être vrai puisqu'ils ont le même nombre de degrés de liberté).

Alors, quelle est la raison de l'utilisation de quaternions sur des vecteurs ou d'autres alternatives?

JMP
la source
2
Le truc "sans gimbal lock" est un mensonge de toute façon. Vous avez le même problème de verrouillage de la nacelle que vous avez avec les angles d'Euler si vous utilisez deux rotations orthogonales avec un quaternion. Vous n'avez pas de problème pour une seule rotation car il s'agit d'une opération, pas de 3.
Damon
2
@Damon Ce n'est pas tout à fait vrai. Voir mathoverflow.net/a/95908/97344
plasmacel

Réponses:

61

Le verrouillage du cardan est une des raisons, bien que, comme vous le dites, ce n'est qu'un problème avec les angles d'Euler et qu'il soit facilement résolu. Les angles d'Euler sont toujours utilisés lorsque la mémoire est un problème car vous n'avez besoin de stocker que 3 nombres.

Pour les quaternions par rapport à une matrice de rotation 3x3, le quaternion a l'avantage en taille (4 scalaires contre 9) et en vitesse (la multiplication de quaternions est beaucoup plus rapide que la multiplication de matrice 3x3).

Notez que toutes ces représentations des rotations sont utilisées dans la pratique. Les angles d'Euler utilisent le moins de mémoire; les matrices utilisent plus de mémoire mais ne souffrent pas du verrouillage du cardan et ont de bonnes propriétés analytiques; et les quaternions offrent un bel équilibre entre les deux, étant légers, mais sans verrouillage de cardan.

Peter Alexander
la source
Mais une matrice de rotation n'a pas autant de composants indépendants - elle est contrainte. Une rotation bidimensionnelle est spécifiée par trois coordonnées en trois dimensions, quelle que soit la représentation. Les matrices ont plus de composants en général car elles peuvent faire plus que des rotations. Mais dans le cas des rotations, les composants supplémentaires sont déterminés par rapport aux autres.
JMP
1
@JMP: Vous avez raison. Beaucoup de gens «compressent» la matrice de sorte que vous ne stockiez que autant d'informations que nécessaire, mais une matrice compressée est plus difficile à gérer, vous perdez donc des performances. Tout est question de compromis entre mémoire et performances.
Peter Alexander
10
@JMP Les routines de multiplication matricielles standard nécessitent cependant les 9 valeurs. Même si seulement 3 d'entre eux sont indépendants, il faut encore 9 nombres de mémoire pour faire le calcul (encore une fois, si vous effectuez réellement la multiplication matricielle dans l'ordinateur).
David Z
1
"La multiplication par quaternions est beaucoup plus rapide que la multiplication par matrice 3x3" Vraiment? La rotation quaternion nécessite 24 opérations add / mul (en raison de deux fois les opérations croisées et supplémentaires), la matrice 3x3 ne nécessite que 15 opérations add / mul.
Marat Buharov
Peut utiliser simplement 2 vecteurs (6 flotteurs) pour représenter totalement une orientation 3D, le 3ème vecteur est juste une croix. L'avantage des matrices est qu'elles sont déjà sous une forme prête à être utilisée pour de nombreuses applications. Euler et Quats nécessitent tous deux un emballage (à partir de la matrice) et un déballage (à la matrice), ce qui nécessite un traitement supplémentaire. Euler et Quats peuvent être utiles pour un stockage compact à long terme.
user3015682 le
39

En physique, il y a de très bonnes raisons pour lesquelles nous n'utilisons pas les quaternions (malgré l'histoire bizarre qui est parfois racontée à propos de Hamilton / Gibbs / etc.). La physique exige que nos descriptions aient un bon comportement analytique (cela a une signification précisément définie, mais de certaines manières plutôt techniques qui vont bien au-delà de ce qui est enseigné dans les classes d'introduction normales, donc je n'entrerai pas dans les détails). Il s'avère que les quaternions n'ont pas ce comportement agréable, et donc ils ne sont pas utiles, et les vecteurs / matrices en ont, donc nous les utilisons.

Eh bien, je suis aussi physicien. Et il y a des situations où les quaternions basculent tout simplement! Harmoniques sphériques par exemple. Vous avez deux atomes qui se diffusent, échangent un électron: qu'est-ce que le transfert de spin orbital? Avec les quaternions, il s'agit simplement d'une multiplication, c'est-à-dire de la somme des exposants des fonctions de base SH exprimées en quaternions. (Cependant, mettre les polynômes de Legendre en notation quaternion est un peu fastidieux).

Mais je suis d'accord, ils ne sont pas un outil universel, et surtout dans la mécanique des corps rigides, ils seraient très lourds à utiliser. Pourtant, pour citer Bertrand Russell, répondez à la question d'un élève combien un physicien doit savoir en mathématiques: "Autant que possible!"

Quoi qu'il en soit: pourquoi aimons-nous les quaternions en infographie? Parce qu'ils ont un certain nombre de propriétés attrayantes. Tout d'abord, on peut bien les interpoler, ce qui est important si l'on anime des choses en rotation, comme les membres autour d'une articulation. Avec un quaternion, ce n'est qu'une multiplication et une normalisation scalaires. L'exprimer avec une matrice nécessite l'évaluation de sin et cos, puis la construction d'une matrice de rotation. Alors multiplier un vecteur par un quaternion est encore moins cher que de passer par une multiplication vectorielle-matrice complète, c'est aussi encore moins cher si on ajoute une traduction par la suite. Si vous considérez un système d'animation squelettique pour un personnage humain, où l'on doit évaluer beaucoup de translation / rotation pour un grand nombre de sommets, cela a un impact énorme.

Un autre effet secondaire intéressant de l'utilisation de quaternions est que toute transformation est intrinsèquement orthonormée. Avec les matrices de traduction, il faut réorthonormaliser chaque couple d'étapes d'animation, en raison d'erreurs d'arrondi numérique.

datenwolf
la source
1
Avez-vous une référence pour les harmoniques sphériques / polynômes de Legendre avec quaternions? Je suis sur le point de soumettre un article traitant de sujets connexes et j'aimerais voir (pouvoir citer) d'autres travaux à ce sujet.
Mike
4
@Mike: Hors de ma tête, malheureusement rien n'a été publié. Malheureusement, les quaternions sont encore assez obscurs pour les physiciens. Je m'en souviens juste, car mon tuteur de Quantum Mechanic 2 en a fait un exercice et j'en ai été époustouflé. Nous avons essentiellement utilisé le terme exp ((a · iω + b · jθ + c · kη + d) r), où r lui-même était une variable complexe. Si vous tracez cela, vous obtenez une distribution en 3 dimensions (nous devions d'abord développer la série exponentielle par rapport à une variable quaternion). Cela permet de faire une transformation de "fourier", ce qui donne quelque chose que vous pourriez transformer en termes SH connus.
datenwolf
31

L'argument sans gimbal lock semble étrange, car il ne s'agit que d'un problème d'angles d'euler. Ce n'est également qu'un problème de coordonnées (tout comme la singularité à r = 0 en coordonnées polaires (le jacobien perd son rang)), ce qui signifie que ce n'est qu'un problème local, et peut être résolu en changeant de coordonnées, en tournant hors de la dégénérescence, ou en utilisant deux systèmes de coordonnées qui se chevauchent.

De nombreuses applications 3D comme l'utilisation des angles d'Euler pour définir l'orientation d'un objet. Pour les simulateurs de vol en particulier, ils représentent un moyen théoriquement utile de stocker l'orientation d'une manière facilement modifiable.

Vous devez également être conscient que des choses comme «changer de coordonnées, sortir de la dégénérescence ou utiliser deux systèmes de coordonnées qui se chevauchent» nécessitent tous des efforts. L'effort signifie le code. Et le code est synonyme de performance. Perdre des performances lorsque vous n'avez pas à le faire n'est pas une bonne chose pour de nombreuses applications 3D. Après tout, quels sont les avantages de toutes ces astuces, si le simple fait d'utiliser des quaternions vous procurait tout ce dont vous aviez besoin.

Je suis moins sûr des problèmes numériques, car je ne sais pas en détail comment ces deux (et toutes les alternatives) seraient implémentés. J'ai lu que la normalisation d'un quaternion est plus facile que de le faire pour une matrice de rotation, mais ce n'est vrai que pour une matrice générale; une rotation a des contraintes supplémentaires qui banalisent cela (qui sont intégrées dans la définition des quaternions) (en fait, cela doit être vrai puisqu'ils ont le même nombre de degrés de liberté).

Les problèmes numériques surviennent lors du traitement de plusieurs rotations consécutives d'une orientation. Imaginez que vous avez un objet dans l'espace. Et à chaque tranche de temps, vous lui appliquez un petit changement de lacet. Après chaque changement, vous devez re-normaliser l'orientation; sinon, des problèmes de précision vont s'infiltrer et tout gâcher.

Si vous utilisez des matrices, chaque fois que vous effectuez une multiplication matricielle, vous devez réorthonormaliser la matrice. La matrice que vous orthonormalisez n'est pas encore une matrice de rotation, donc je ne serais pas trop sûr de cette orthonormalisation facile. Cependant, je peux en être sûr:

Ce ne sera pas aussi rapide qu'une normalisation vectorielle 4D. C'est ce que les quaternions utilisent pour normaliser après des rotations successives.

La normalisation quaternion est bon marché. Même la normalisation spécialisée de la matrice de rotation ne sera pas aussi bon marché. Encore une fois, la performance compte.

Il y a aussi un autre problème que les matrices ne font pas facilement: l'interpolation entre deux orientations différentes.

Lorsqu'il s'agit d'un personnage 3D, vous avez souvent une série de transformations définissant l'emplacement de chaque os dans le personnage. Cette hiérarchie d'os représente le personnage dans une pose particulière.

Dans la plupart des systèmes d'animation, pour calculer la pose d'un personnage à un moment donné, on interpole entre les transformations. Cela nécessite d'interpoler les transformations correspondantes.

Interpoler deux matrices est ... non trivial. Au moins, c'est si vous voulez quelque chose qui ressemble à une matrice de rotation à la fin. Après tout, le but de l'interpolation est de produire quelque chose à mi-chemin entre les deux transformations.

Pour les quaternions, tout ce dont vous avez besoin est un lerp 4D suivi d'une normalisation. C'est tout: prenez deux quaternions et interpolez linéairement les composants. Normalisez le résultat.

Si vous voulez une interpolation de meilleure qualité (et parfois vous le faites), vous pouvez faire ressortir la lerp sphérique . Cela permet à l'interpolation de mieux se comporter pour des orientations plus disparates. Ce calcul est beaucoup plus difficile et nécessite plus d'opérations pour les matrices que pour les quaternions.

Nicol Bolas
la source
7

Avis: Les quaternions sont sympas.

Matrice de rotation: inconvénient mineur : la multiplication des matrices est ~ 2 fois plus lente que les quaternions. Avantage mineur : la multiplication matrice-vecteur est ~ 2 fois plus rapide et grande. Énorme inconvénient : la normalisation! Ghram-Shmit est asymétrique, ce qui ne donne pas de réponse précise d'ordre supérieur lors de la réalisation d'équations différentielles. Les méthodes plus sophistiquées sont très complexes et coûteuses.

Axe (angle = longueur de l'axe) Avantage mineur : petit. Désavantage modéré : la multiplication et l'application à un vecteur sont lentes avec trig. Inconvénient modéré : singularité du pôle Nord à longueur = 2 * pi, car toutes les directions des axes ne font rien. Plus de code (et de débogage) pour le redimensionner automatiquement lorsqu'il s'approche de 2pi.

Kevin Kostlan
la source
5

Généralement, nous voulons juste un mappage d'un point X = (x, y, z) vers un nouveau point X '= (x', y ', z') soumis à la contrainte que X ^ 2 = X '^ 2. Et il y a beaucoup de choses qui font cela.

Nous ne absolument pas seulement voulons que. Il y a une subtilité très importante qui manque à beaucoup de gens . La construction dont vous parlez (dessinez les triangles et utilisez trig, etc.) fera correctement pivoter un vecteur dans l'autre. Mais il y a une infinité de rotations qui feront cela. En particulier, je peux venir après avoir fait votre rotation, puis faire pivoter tout le système autour du vecteur X '. Cela ne changera pas du tout la position de X '. La combinaison de votre rotation et de la mienne équivaut à une autre rotation unique (puisque les rotations forment un groupe ). En général, vous devez être en mesure de représenter une telle rotation.

Il s'avère que vous pouvez le faire avec juste un vecteur. (C'est la représentation axe-angle des rotations .) Mais combiner les rotations dans la représentation axe-angle est difficile. Les quaternions facilitent les choses, ainsi que beaucoup d'autres choses. Fondamentalement, les quaternions ont tous les avantages des autres représentations, et aucun des inconvénients. (Bien que j'admette qu'il peut y avoir des applications spécifiques pour lesquelles une autre représentation peut être meilleure.)

Mike
la source
4

Les raisons habituelles que je vois sont l'absence de gimble lock ou des problèmes numériques.

Et ce sont de bonnes raisons.

Comme vous semblez déjà le comprendre, les quaternions codent une seule rotation autour d'un axe arbitraire par opposition à trois rotations séquentielles dans l'espace d'Euler 3. Cela rend les quaternions immunisés contre le verrouillage du cardan .

De plus, certaines formes d'interpolation deviennent agréables et faciles à faire, comme SLERP .

... ou en utilisant deux systèmes de coordonnées qui se chevauchent.

Du point de vue des performances, pourquoi votre solution est-elle meilleure?

Je pourrais continuer, mais les quaternions ne sont qu'un outil possible à utiliser. S'ils ne correspondent pas à vos besoins, ne les utilisez pas.

Sage Gérard
la source
Pourtant, les matrices de rotation font de même, et ont plus de propriétés algébriques qui peuvent être utilisées avec soin. En plus de cette manipulation matricielle, il y a l'une des choses pour lesquelles les ordinateurs sont particulièrement bons.
paul23
3

Il convient de garder à l'esprit que toutes les propriétés liées à la rotation ne sont pas vraiment des propriétés des Quaternions: ce sont des propriétés des paramétrisations d' Euler-Rodrigues , qui est la structure à 4 éléments utilisée pour décrire une rotation 3D.

Leur relation aux Quaternions est purement due à un article de Cayley, «Sur certains résultats liés aux Quaternions», où l'auteur observe la corrélation entre la multiplication des Quaternions et la combinaison des paramétrisations d'Euler-Rodrigues. Cela a permis d'appliquer des aspects de la théorie du Quaternion à la représentation des rotations et surtout à l'interpolation entre elles.

Vous pouvez lire l'article ici: https://archive.org/details/collmathpapers01caylrich . Mais à l'époque, il n'y avait aucun lien entre les Quaternions et la rotation et Cayley fut plutôt surpris de constater qu'il y avait:

En fait, les formules sont précisément celles données pour une telle transformation par M. Olinde Rodrigues Liouville, tv, "Des lois géométriques qui régissent les déplacements d'un système solide [...]" (ou Comb. Math. Journal, t. iii. p. 224 [6]). Il serait intéressant de rendre compte, a priori, de l'apparition de ces coefficients ici.

Cependant, il n'y a rien d'intrinsèque dans les Quaternions qui donne un avantage à la rotation. Les quaternions n'évitent pas le verrouillage de la nacelle; Les paramétrisations d'Euler-Rodrigues le font. Très peu de programmes informatiques qui effectuent une rotation sont susceptibles d'implémenter réellement des types Quaternion qui sont des valeurs mathématiques complexes de première classe. Malheureusement, un malentendu sur le rôle des Quaternions semble avoir fui quelque part, ce qui a amené de nombreux étudiants en graphisme déconcertés à apprendre les détails de mathématiques complexes avec plusieurs constantes imaginaires, puis à se demander pourquoi cela résout les problèmes de rotation.

Mark Green
la source
1

Une réponse que quelqu'un pourrait lire: Il y a des problèmes fastidieux avec toutes les représentations. Les quaternions sont plus petits que les matrices mais la multiplication des quaternions n'est pas un simple produit scalaire vectoriel ou autre, et prend en fait plus de temps sur un ordinateur que le produit scalaire de deux matrices 3x3. (Les ordinateurs fonctionnent très bien avec des matrices ordinaires)

Les matrices ont cependant d'autres fonctionnalités ennuyeuses. Par exemple, ce ne sont pas des créatures stables à long terme. Lors de la modélisation des rotations dans l'espace 3D, on accumule généralement les rotations les unes sur les autres dans une matrice d'orientation, c'est-à-dire juste une matrice de rotation unique stockant l'orientation d'un cadre de référence. Ce processus, au cours de millions d'ajouts, fera diverger la matrice O d'une forme de matrice de rotation stricte. Cela peut être contourné en reconfigurant périodiquement la matrice, mais il existe des conditions dans lesquelles ce n'est pas trivial. À savoir le cas sans rotation de la matrice d'identité.

Vous voudrez trouver une représentation axe-angle (ou représentation quaternion) de la rotation, puis reproduire une matrice pour cela. La plupart des algorithmes produisent un vecteur nul, puis rencontrent une division nulle dans ce cas. Dans ces types de cas, il est également généralement une mauvaise idée d'essayer d'éviter de tels cas avec des solutions de type "si 0 alors ...", car a) les fourches sont lentes et b) vous pouvez toujours finir par machine epsilon en dehors de singularité et se retrouvent avec des erreurs horribles.

Elmore
la source