Qu'est-ce qu'un quaternion?

50

Qu'est-ce qu'un quaternion et comment fonctionne-t-il? Quels avantages avez-vous à utiliser trois points sur un plan 2D? Enfin, quand est-il considéré comme une bonne pratique d’utiliser des quaternions?

SirMathhman
la source
Historiquement, je pense que les quaternions sont arrivés en premier, puis que les produits point et croix ont été dérivés des quaternions.
2
J'ai trouvé cet article animé très instructif: acko.net/blog/animate-your-to-glory-pt2/#quaternions
AShelly
En mathématiques pures, je crois que les quaternions sont 3 nombres complexes tels que i² = j² = k² = ijk
Vinz243
Les quaternions sont le meilleur moyen d'interpoler en douceur les rotations. Il ne suffit pas d'interpoler des matrices de rotation, car vous n'obtiendrez pas toujours une matrice de rotation. Les angles d'Euler interpolés n'entraînent pas une rotation régulière. Donc, pour animer des rotations, comme cela est nécessaire en infographie ou en robotique, les quaternions sont la voie à suivre. Et il existe une extension utile, mais pas aussi souvent utilisée, appelée dual quaternions, qui vous permet de représenter la transformation et la rotation
Tobias B

Réponses:

43

Mathématiquement, un quaternion est un nombre complexe à 4 dimensions. Mais dans le développement de jeux, les quaternions sont souvent utilisés pour décrire une rotation dans un espace 3D en encodant:

  1. un axe de rotation (sous la forme d'un vecteur tridimensionnel)
  2. jusqu'où tourner autour de cet axe

Notez que ces informations sont codées avec des sinus et des cosinus à l'intérieur du quaternion. Par conséquent, vous ne devriez généralement pas essayer de définir ou de lire explicitement les composants internes du quaternion (xyzw) individuellement. Il est facile de commettre une telle erreur et d’obtenir un résultat non significatif. Une bibliothèque mathématique quaternion fournit généralement des fonctions permettant d’exploiter les quaternions (par exemple, en les convertissant en angles de Euler ou en angles d’Euler), ce qui garantit que les calculs sont corrects et offre l’avantage supplémentaire de rendre votre code plus facile à lire et à comprendre.

Une autre façon de décrire les rotations consiste à décrire la distance autour de laquelle se trouvent les 3 axes fixes 'x, y et z (angles d'Euler), qui ne nécessitent que 3 chiffres au lieu de 4 et dont l'utilisation est généralement plus intuitive. Cependant, les angles euler sont soumis à un problème appelé blocage de la nacelle : lorsque vous faites pivoter de 90 ° autour d'un axe, les deux autres axes deviennent équivalents. Avec les quaternions, ce problème ne se produit pas.

Une autre façon d’exprimer des rotations dans un espace 3D consiste à utiliser une matrice de transformation 4x4 . Mais avec une matrice de transformation, vous ne pouvez pas simplement faire pivoter, mais aussi mettre à l’échelle, traduire et incliner. Lorsque vous ne voulez que la rotation, une matrice serait excessive et un quaternion une solution beaucoup plus rapide et plus simple.

Ce problème n'est pertinent que dans l'espace 3D. Dans l'espace 2d, vous n'avez qu'un seul axe de rotation. Toute rotation peut être exprimée avec un seul nombre à virgule flottante ou un seul nombre complexe, de sorte que vous n'avez pas ce problème. Bien que vous puissiez théoriquement exprimer une rotation sur un plan 2D avec un quaternion où l'axe pointe dans (ou hors du) plan, il est généralement excessif.

Philipp
la source
6
Le blocage de cardan n’est pas un problème dans les quaternions si vous partez de quaternions et finissez par quaternions, le verrouillage de cardan s’installe dès que vous avez un pas qui se transforme en angle d’arrière ou arrière.
Monstre à cliquet
2
Les quaternions ne sont pas axe + angle, ce sont 3 nombres complexes et une échelle.
transistor09
11
@ transistor09 croiriez-vous que vous avez tous les deux raison? La partie imaginaire à 3 composantes d'un quaternion unitaire peut être interprétée comme un vecteur unitaire le long de l'axe de rotation, mis à l'échelle par le sinus de la moitié de l'angle de rotation. La partie réelle de l'unité quaternion est le cosinus de la moitié de l'angle de rotation. Vous avez donc raison de dire que ce n'est pas exactement un format d'axe en angle, mais il est vrai que les composants d'un quaternion peuvent être interprétés comme un axe et une mesure (non linéaire) de la distance autour de cet axe.
DMGregory
2
Vous pouvez également mentionner l'avantage des quaternions par rapport à une matrice de rotation: ils sont plus rapides à combiner. Lorsque vous combinez des rotations, multiplier deux quaternions nécessite moins d'opérations que multiplier des matrices.
Rétablir Monica
3
En fait, dans l’espace 2D, les nombres complexes sont l’analogue exact. Multipliez un point 2D avec un nombre complexe et vous l'avez pivoté. En fait, il correspond exactement à la rotation sin / cos habituelle (ce qui devrait être évident si vous comprenez suffisamment les nombres complexes). Cela peut être exploité un peu, mais au final, les graphiques 2D n’exigent pas autant de performances que d’aujourd’hui, ils ne vous apporteront donc guère d’amélioration, à moins que vous ne soyez vraiment à l’aise avec l’utilisation de nombres complexes (ce que la plupart des gens ne décident décidément pas. - comme en témoigne le code extrêmement pauvre basé sur les quaternions: D).
Luaan
13

Ceci est à ajouter à la réponse de @ Philipp.

Quels avantages avez-vous à utiliser trois points sur un plan 2D?

Vous n'avez pas vraiment besoin de quaternions si tout ce qui vous intéresse est de faire une rotation sur le plan, c'est- à- dire autour de l'axe z. Dans ce cas, tout ce dont vous avez besoin est l'angle de lacet et vous pouvez exploiter le fait que les rotations successives autour de l'axe z commutent. Vous pouvez donc appliquer vos rotations dans l'ordre de votre choix.

La situation est différente si vous effectuez une rotation sur un plan autre que le plan XY. Cette rotation équivaut à une rotation autour d'un axe 3D arbitraire. Maintenant, vous avez deux choix:

  • faites pivoter votre avion en 3D de manière à ce qu'il coïncide avec l'avion XY, puis faites un mouvement de lacet et revenez en arrière, ou

  • Pensez à votre rotation comme étant en 3D pour commencer.

Le deuxième choix est plus facile à coder. Comme @Philipp a dit, les quaternions évitent le blocage de la nacelle (si vous évitez les conversions RPY ou axe / angle intermédiaires).

Enfin, quand est-il considéré comme une bonne pratique d’utiliser des quaternions?

Chaque fois qu'il y a des rotations 3D, il est recommandé d'utiliser des quaternions.

Par exemple:

  • En Qt . Les quats facilitent l'interpolation entre les rotations, comme dans la fonction slerp .

  • ROS les utilise pour transformer les poses des robots.

  • Dans le moteur dynamique Bullet

  • Pour une application très sophistiquée, voir ici pour leur utilisation en mécanique 3D classique.

PKG
la source
" Chaque fois qu'il y a des rotations 3D, c'est une bonne pratique d'utiliser des quaternions." est juste un peu trop fort. Presque toujours, c'est mieux. il y a des situations où des alternatives sont appropriées. (À titre d'exemple d'imperfection, la nième racine d'un quaternion est à valeurs multiples)
Yakk
1
Les quaternions sont une marchandise à utiliser et une douleur à mettre en œuvre. Vous pouvez vous en passer si vous êtes au courant du blocage du cardan.
Hatoru Hansou