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

je suis un physicien, et j'ai appris à programmer, et j'ai rencontré beaucoup de gens utilisant des quaternions pour des 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 (ceci a une signification précisément définie, mais dans certains cas plutôt technique des façons qui vont bien au-delà de ce qui est enseigné dans les classes d'introduction normales, donc je ne vais pas entrer 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 vecteurs/matrices le font, donc nous les utilisons.

cependant, limité aux rotations rigides et aux descriptions qui n'utilisent aucune structure analytique, les rotations 3D peuvent être décrites de façon équivalente de l'une ou l'autre façon (ou de quelques autres façons).

Généralement, nous voulons juste une cartographie d'un point X = (x, y, z) à un nouveau point X' = (x', y', z') sous réserve de 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 cela définit et utiliser la trigonométrie, ou 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érer les vecteurs?

les raisons habituelles que je vois sont AUCUNE serrure à cardan, ou des problèmes numériques.

l'argument de verrouillage sans cardan semble étrange, puisqu'il ne s'agit que d'un problème d'angles d'euler. Il s'agit également d'un problème de coordonnées (tout comme la singularité à r=0 en coordonnées polaires (le Jacobien perd son rang)), ce qui signifie qu'il ne s'agit que d'un problème local, et peut être résolu en changeant les coordonnées, en tournant hors de la dégénérescence, ou en utilisant deux systèmes de coordonnées se chevauchant.

je suis moins sûr sur les questions numériques, car je ne sais pas en détail comment ces deux - là (et toutes les solutions de rechange) seraient mises en œuvre. J'ai lu qu'il est plus facile de re-normaliser un quaternion que de le faire pour une matrice de rotation, mais cela 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 car ils ont le même nombre de degrés de liberté).

Quelle est donc la raison de l'utilisation des quaternions sur les vecteurs ou d'autres alternatives?

84
demandé sur Mateen Ulhaq 2012-01-19 03:30:36

7 réponses

serrure à cardan est une raison, bien que comme vous le dites, il est seulement un problème avec les angles D'Euler et est facile à résoudre. Angles d'Euler sont encore utilisés lorsque la mémoire est une préoccupation que vous avez seulement besoin d'enregistrer 3 numéros.

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

noter que tous de ces représentations de rotations sont utilisés dans la pratique. Les angles d'Euler utilisent le moins de mémoire; les matrices utilisent plus de mémoire, mais ne souffrent pas de la serrure du cardan et ont de bonnes propriétés analytiques; et les quaternions atteignent un bon équilibre des deux, étant légers, mais exempts de la serrure du cardan.

47
répondu Peter Alexander 2012-01-18 23:38:21

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 dans certains moyens plutôt techniques qui vont bien au-delà de ce qui est enseigné dans les classes d'introduction normales, donc je ne vais pas entrer dans les détails). Il s'avère que les quaternions n'ont pas cette belle comportement, et donc ils ne sont pas utiles, et comme les vecteurs / matrices le font, nous les utilisons.

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

mais je suis d'accord, ils ne sont pas un outil universel, et surtout dans la mécanique du corps rigide, ils seraient très encombrants à utiliser. Pourtant, pour citer Bertrand Russell réponse à la question d'un étudiant combien de mathématiques un physicien doit savoir: " autant que possible!"

en tout cas: pourquoi aimons-nous les quaternions en infographie? Parce qu'ils ont un certain nombre de attrayant propriétés. D'abord on peut les interpoler gentiment, ce qui est important si on anime des choses tournantes, comme les membres autour d'un joint. Avec un quaternion, c'est juste une multiplication et une normalisation scalaire. Exprimer ceci avec une matrice exige l'évaluation du sin et du cos, puis la construction d'une matrice de rotation. Alors multiplier un vecteur avec un quaternion est encore moins cher comme passer par une pleine multiplication vectorielle-matrice, il est aussi encore moins cher si on ajoute une traduction après. Si vous considérez un système d'animation squelettique pour un personnage humain, où on doit évaluer beaucoup de traduction / rotations pour un grand nombre de Sommets, cela a un impact énorme.

un autre bel effet secondaire de l'utilisation de quaternions est, que toute transformation est intrinsèquement orthonormal. Avec les matrices de traduction, il faut re-orthonormaliser chaque couple d'étapes d'animation, en raison d'erreurs numériques d'arrondi.

31
répondu datenwolf 2014-10-11 00:53:51

l'argument de verrouillage sans cardan semble étrange, puisqu'il ne s'agit que d'un problème d'angles d'euler. Il s'agit également d'un problème de coordonnées (tout comme la singularité à r=0 en coordonnées polaires (le Jacobien perd son rang)), ce qui signifie qu'il ne s'agit que d'un problème local, et peut être résolu en changeant les coordonnées, en tournant hors de la dégénérescence, ou en utilisant deux systèmes de coordonnées se chevauchant.

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

vous devriez également être conscient que des choses comme" commutation des coordonnées, rotation hors de la dégénérescence, ou en utilisant deux systèmes de coordonnées se chevauchant " tous exigent un effort. Effort signifie code. Et le code signifie la performance. Perdre la performance quand vous ne ont à n'est pas une bonne chose pour beaucoup de 3D application. Après tout, ce qui est à gagner par tous ces trucs, si seulement en utilisant quaternions vous obtiendriez tout ce dont vous aviez besoin.

je suis moins sûr sur les questions numériques, car je ne sais pas en détail comment ces deux (et toutes les alternatives) serait mis en œuvre. J'ai lu que la re-normalisation d'un quaternion est plus facile que de le faire pour une matrice de rotation, mais c'est seulement vrai pour une matrice générale; une rotation a des contraintes supplémentaires qui banalise ce (qui sont construits dans la définition de quaternions) (En fait, ceci doit être vrai car ils ont le même nombre de degrés de liberté).

les problèmes numériques surgissent lorsque l'on fait face à plusieurs rotations consécutives d'une orientation. Imaginez que vous avez un objet dans l'espace. Et à chaque fois, vous lui appliquez un petit changement de lacet. Après chaque changement, vous avez besoin de re-normaliser l'orientation; sinon, les problèmes de précision se glissent et vissent les choses.

si vous utilisez des matrices, chaque fois que vous faites la 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 du Quaternion est bon marché. Même la normalisation de matrice de rotation spécialisée ne sera pas comme pas cher. Encore une fois, la performance est importante.

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

lorsqu'on traite d'un personnage en 3D, On a souvent une série de transformations qui définissent l'emplacement de chaque os du personnage. Cette hiérarchie d'OS représente le personnage dans une pose.

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 l'interpolation des transformations correspondantes.

interpolation de deux matrices est... non-trivial. Du moins, 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 le deux transformations.

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

si vous voulez une meilleure interpolation de qualité (et parfois vous le faites), vous pouvez sortir le sphérique lerp . 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 de quaternions.

23
répondu Nicol Bolas 2012-01-19 00:24:57

Avis: les Quaternions sont sympa.

matrice de Rotation: Minor disadvantage : la Multiplication des matrices est environ 2 fois plus lente que les quaternions. Avantage Mineur : Matrice-vecteur de multiplication est ~2 fois plus rapide, et grande. énorme désavantage : normalisation! Ghram-Shmit est asymétrique, ce qui ne donne pas un commandez réponse exacte lorsque vous faites des équations différentielles. Des méthodes plus sophistiquées sont très complexes et coûteux.

axe (angle = longueur de l'axe) avantage Mineur : Petit. désavantage moyen : la Multiplication et l'application à un vecteur est lente avec trig. désavantage moyen : singularité du pôle Nord à la longueur = 2 * pi, puisque toutes les directions axiales ne font rien. Plus de code (et débogage) pour le changer automatiquement quand il se rapproche de 2pi.

6
répondu Kevin Kostlan 2013-04-26 23:47:40

en Général, nous voulons juste une cartographie d'un point X=(x,y,z) à un nouveau point X'=(x',y',z') sous réserve de la contrainte que X^2 = X^2. Et il y a beaucoup de choses qui font cela.

nous ne voulons absolument pas juste . Il y a une subtilité très importante que beaucoup de gens manquent . La construction dont vous parlez (dessiner les triangles et utiliser trig, etc.) correctement tourner un vecteur dans l'autre. Mais il y a infiniment de rotations qui feront cela. En particulier, je peux venir après que vous avez fait votre rotation, et puis tourner le système entier autour du vecteur de X'. Ça ne changera pas du tout la position de X'. La combinaison de votre rotation et la mienne est équivalente à une autre rotation simple (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 d'autres la représentation pourrait être meilleure.)

4
répondu Mike 2013-02-14 01:45:31

il est intéressant 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 de Euler-Rodrigues paramétrisations , qui est la structure réelle à 4 éléments utilisés pour décrire une rotation 3D.

leur relation aux Quaternions est purement due à un papier 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étrages D'Euler et de Rodrigues. Ceci permit d'appliquer des aspects de la théorie du Quaternion à la représentation des rotations et surtout à l'interpolation entre elles.

vous pouvez lire le papier ici: https://archive.org/details/collmathpapers01caylrich . Mais à l'époque, il n'y avait aucun lien entre les Quaternions et la rotation et Cayley a été 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, T. v., "Des lois géométriques qui régissent les déplacements d'un système solide [...]" (ou un Peigne. Mathématique. Journal, T. iii. p. 224 [6]). Il serait intéressant question de 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 quelconque avantage à la rotation. Les Quaternions n'évitent pas la serrure à cardan; les paramétrages Euler-Rodrigues si. Très peu de programmes informatiques qui effectuent la rotation sont susceptibles de vraiment mettre en œuvre des types Quaternion qui sont de première classe des valeurs mathématiques complexes. Malheureusement, une mauvaise compréhension du rôle des Quaternions semble avoir filtré quelque part résultant en un certain nombre d'étudiants graphiques déconcertés d'apprendre les détails des mathématiques complexes avec de multiples constantes imaginaires et d'être ensuite déconcertés quant à la raison pour laquelle cela résout les problèmes avec la rotation.

3
répondu Mark Green 2016-06-08 23:33:14

les raisons habituelles que je vois sont AUCUNE serrure à cardan, ou des problèmes numériques.

et ce sont de bonnes raisons.

comme vous semblez déjà comprendre, quaternions encode une rotation simple autour d'un axe arbitraire par opposition à trois rotations séquentielles dans Euler 3-space. Cela rend les quaternions immunisés contre les serrures à cardan .

aussi, certaines formes d'interpolation deviennent belles et facile à faire, comme SLERP .

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

du point de vue de la performance, pourquoi votre solution est-elle meilleure?

je pourrais continuer, mais les quaternions ne sont qu'un outil possible à utiliser. S'ils ne répondent pas à vos besoins, ne les utilisez pas.

3
répondu Sage Gerard 2016-08-27 04:24:53