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?
mathematics
terminology
SirMathhman
la source
la source
Réponses:
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:
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.
la source
Ceci est à ajouter à la réponse de @ Philipp.
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).
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.
la source