133 votes

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

Je suis un physicien, et ont été à l'apprentissage d'un peu de programmation, et ont rencontré beaucoup de personnes utilisant les quaternions pour les rotations au lieu d'écrire des choses dans la matrice/vecteur forme.

En physique, il y a de très bonnes raisons pour ne pas utiliser les quaternions (malgré l'étrange histoire qui est parfois dit à propos de Hamilton/Gibbs/etc). La physique exige que nos descriptions ont de bonnes analytique de comportement (ce qui a précisément définies sens, mais dans certains, plutôt technique, des moyens qui vont bien au-delà de ce qui est enseigné dans la normale intro classes, donc je ne rentrerai pas 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 les vecteurs/matrices de le faire, de sorte que nous les utilisons.

Toutefois, limité à des rotations et des descriptions qui n'utilisent pas toute analytique des structures, des rotations 3D peut être décrit de manière équivalente de toute 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.

Le naïf façon consiste à dessiner les triangles permet de définir et d'utiliser la trigo, ou utiliser l'isomorphisme entre un point (x,y,z) et d'un vecteur (x,y,z) et la fonction f(X) = X' et une matrice MX=X', ou en utilisant les quaternions, ou de la projection sur les composantes de l'ancien vecteur le long de la nouvelle à l'aide d'une autre méthode (x, y, z)^T.(a,b,c) (x',y',z'), etc, etc.

À partir de maths point de vue, ces descriptions sont équivalentes dans ce milieu (comme un théorème). Ils ont tous le même nombre de degrés de liberté, le même nombre de contraintes, etc.

Alors, pourquoi ne quaternions semblent privilégiées sur les vecteurs?

Les raisons d'habitude je vois pas gimbal lock, ou numérique des problèmes.

Le pas de gimbal lock argument me semble bizarre, car ce n'est qu'un problème d'angles d'euler. Il est également à seulement coordonner problème (tout comme la singularité en r=0 en coordonnées polaires (le Jacobien perd rang)), ce qui signifie qu'il est seulement un problème local, et peut être résolu en changeant les coordonnées, la rotation de la dégénérescence, ou à l'aide de deux chevauchement des systèmes de coordonnées.

Je suis moins sûr de numérique des problèmes, car je ne sais pas en détail comment ces deux (et les solutions de rechange) serait mis en place. J'ai lu que la re-normalisation d'un quaternion est plus facile que de le faire que pour une matrice de rotation, mais cela n'est vrai que pour une matrice; une rotation 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é).

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

81voto

Peter Alexander Points 31990

Gimbal lock est une des raisons, bien que comme tu le dis c'est seulement un problème avec les angles d'Euler et est facilement résoluble. 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 à un 3x3 matrice de rotation, le quaternion a l'avantage de la taille (4 scalaires contre 9) et la vitesse (la multiplication des quaternions est beaucoup plus rapide que la matrice de 3x3 multiplication).

Notez que toutes ces représentations de rotations sont utilisés dans la pratique. Angles d'Euler utiliser le moins de mémoire; les matrices d'utiliser plus de mémoire, mais ne souffrent pas de Cardan de verrouillage et de belles propriétés analytiques; et les quaternions frappe un bel équilibre à la fois léger, mais libre à partir de Gimbal lock.

46voto

datenwolf Points 85093

En physique, il y a de très bonnes raisons pour ne pas utiliser les quaternions (malgré l'étrange histoire qui est parfois dit à propos de Hamilton/Gibbs/etc). La physique exige que nos descriptions ont de bonnes analytique de comportement (ce qui a précisément définies sens, mais dans certains, plutôt technique, des moyens qui vont bien au-delà de ce qui est enseigné dans la normale intro classes, donc je ne rentrerai pas 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 les vecteurs/matrices de le faire, de sorte que nous les utilisons.

Eh bien, je suis un physicien, trop. Et il y a certaines situations où les quaternions simplement rock! Harmoniques sphériques par exemple. Vous avez deux atomes de diffusion, l'échange d'un électron: qu'est-ce que l'orbite de transfert de spin? Avec les quaternions, il est juste de multiplication c'est à dire en additionnant les représentants de la SH de la base de fonctions exprimé comme les quaternions. (Les Polynômes de Legendre dans la notation quaternion est un peu fastidieux).

Mais je suis d'accord, ils ne sont pas un outil universel, et en particulier dans les corps rigide de la mécanique, ils seraient très difficiles à utiliser. Encore citer Bertrand Russell réponse à la question d'un étudiant combien de mathématiques, un physicien a besoin de savoir: "autant Que possible!"

De toute façon: Pourquoi aimons-nous les quaternions en infographie? Parce qu'ils ont un certain nombre de attrayant propriétés. On peut d'abord bien interpoler entre eux, ce qui est important si l'on est d'animer la rotation de choses, comme les membres autour d'une articulation. Avec un quaternion, c'est juste scalaire de la multiplication et de la normalisation. Exprimer cela avec une matrice exige une évaluation de sin et cos, puis la construction d'une matrice de rotation. Ensuite, la multiplication d'un vecteur par un quaternion est toujours moins cher que d'aller grâce à un vecteur-matrice de la multiplication, il est encore moins cher si on ajoute une traduction par la suite. Si vous considérez le squelette d'un système d'animation pour un personnage de l'homme, où l'on doit évaluer un lot de traduction/rotations pour un grand nombre de sommets, cela a un impact énorme.

Un autre effet secondaire de nice, de l'utilisation des quaternions est, que toute transformation est intrinsèquement repère orthonormé. Avec la traduction des matrices, on doit re-orthonormalize tous les deux étapes de l'animation, en raison d'numérique des erreurs d'arrondi.

41voto

Nicol Bolas Points 133791

Le pas de gimbal lock argument me semble bizarre, car ce n'est qu'un problème d'angles d'euler. Il est également à seulement coordonner problème (tout comme la singularité en r=0 en coordonnées polaires (le Jacobien perd rang)), ce qui signifie qu'il est seulement un problème local, et peut être résolu en changeant les coordonnées, la rotation de la dégénérescence, ou à l'aide de deux chevauchement des systèmes de coordonnées.

De nombreuses applications 3D comme l'utilisation d'angles d'Euler pour la définition d'une orientation de l'objet. Pour les vols sims en particulier, ils représentent une théorie utile pour le stockage de l'orientation dans une manière qui est facilement modifiable.

Vous devriez aussi être conscient que des choses comme "changement de coordonnées, la rotation de la dégénérescence, ou à l'aide de deux chevauchement des systèmes de coordonnées" tous exigent des efforts. L'Effort signifie que le code. Et du code de la performance. Perdre en performance lorsque vous n'avez pas l' avoir , ce n'est pas une bonne chose pour de nombreuses applications 3D. Après tout, ce qui doit être acquis par tous ces trucs, si juste en utilisant les quaternions serait que vous obtenez tout ce dont vous avez besoin.

Je suis moins sûr de numérique des problèmes, car je ne sais pas en détail comment ces deux (et les solutions de rechange) serait mis en place. J'ai lu que la re-normalisation d'un quaternion est plus facile que de le faire que pour une matrice de rotation, mais cela n'est vrai que pour une matrice; une rotation 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é).

Le numérique des problèmes concernant consécutives multiples rotations d'une orientation. Imaginez que vous avez un objet dans l'espace. Et chaque timeslice, vous appliquez un petit changement de lacet. Après chaque modification, vous devez re-normaliser l'orientation; sinon, la précision problèmes de fluage et vis les choses.

Si vous utilisez des matrices, chaque fois que vous faites de la multiplication de matrice, vous devez re-orthonormalize la matrice. La matrice que vous êtes orthonormalizing n'est pas encore une matrice de rotation, de sorte que je ne serais pas si sûr facile d'orthonormalisation. Cependant, je peux être sûr à ce sujet:

Il ne sera pas aussi rapide qu'un 4D vecteur de normalisation. C'est ce que les quaternions utiliser pour normaliser après des rotations successives.

La normalisation d'un Quaternion est bon marché. Même spécialisés matrice de rotation de normalisation ne sera pas aussi bon marché. Encore une fois, la performance est importante.

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

Lorsque vous traitez avec un personnage 3D, vous avez souvent une série de transformations de définir l'emplacement de chaque os dans le caractère. Cette hiérarchie des 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 d'interpolation de la transformation correspondantes.

L'interpolation des deux matrices est... non-trivial. Au moins, c'est que 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, tous vous avez besoin est un 4D lerp suivie par une normaliser. C'est tout: prendre deux quaternions et interpoler linéairement les composants. Normaliser le résultat.

Si vous voulez une meilleure qualité de l'interpolation (et parfois, vous n'), vous pouvez faire ressortir la sphériques lerp. Cela rend l'interpolation se comportent mieux pour les plus disparates orientations. Ce calcul est beaucoup plus difficile et demande plus d'opérations pour les matrices de quaternions.

9voto

Mike Points 2409

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.

Nous n'avons absolument pas juste envie de cela. Il est très important de subtilité que beaucoup de gens manquer. La construction dont vous parlez (dessiner les triangles et utiliser la trigo, etc.) correctement tourner un vecteur dans l'autre. Mais il existe une infinité de rotations qui va le faire. En particulier, je peux venir après que vous avez fait de votre rotation, puis faites pivoter l'ensemble du système autour de la X' vecteur. Cela ne changera pas la position de X'. La combinaison de votre rotation et la mienne est équivalent à un autre rotation unique (depuis 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 un vecteur. (C'est l' axe de l'angle de la représentation des rotations.) Mais la combinaison de rotations dans l'axe de l'angle de la représentation est difficile. Les Quaternions le rendre facile, ainsi que beaucoup d'autres choses. Fondamentalement, les quaternions ont tous les avantages des autres représentations, et aucun des inconvénients. (Même si j'admets qu'il peut y avoir des applications spécifiques pour lesquelles certains autres de représentation peut être mieux).

9voto

Sage Gerard Points 344

Les raisons d'habitude je vois pas gimble de verrouillage, ou numérique des problèmes.

Et ils sont de bonnes raisons.

Comme vous l'avez déjà l'air de comprendre, les quaternions coder une seule rotation autour d'un axe arbitraire contrairement à trois séquentielle les rotations d'Euler 3-espace. Cela rend les quaternions immunitaire à gimbal lock.

En outre, certaines formes d'interpolation devenir agréable et facile à faire, comme SLERP.

...ou à l'aide de deux chevauchement des systèmes de coordonnées.

À partir d'un point de vue des performances, pourquoi votre solution est la meilleure?

Je pourrais continuer, mais les quaternions sont juste un outil à utiliser. Si elle ne convient pas à vos besoins, alors ne les utilisez pas.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X