Le problème avec les rotations, c'est que, la plupart des gens le pensent en termes d'angles d'Euler, car ils sont faciles à comprendre.
Pourtant, la plupart des gens oublient que les angles d'Euler sont trois angles séquentiels . Cela signifie que la rotation autour du premier axe rendra la rotation suivante relative à la première rotation d'origine, vous ne pouvez donc pas faire pivoter indépendamment un vecteur autour de chacun des 3 axes à l'aide des angles d'Euler.
Cela se traduit directement en matrices lorsque vous multipliez deux matrices, vous pouvez penser à cette multiplication comme transformant une matrice en l'espace de l'autre matrice.
Cela est censé se produire avec 3 rotations séquentielles, même lorsque vous utilisez des quaternions.
Je tiens à souligner le fait que les quaternions ne sont pas une solution pour le verrouillage de vrille. En fait, le verrouillage de vrille se produira toujours si vous représentez les angles d'Euler à l'aide de quaternions. Le problème n'est pas la représentation, le problème est les 3 étapes séquentielles.
La solution?
La solution pour faire tourner un vecteur autour de 3 axes indépendamment est de combiner en un seul axe et un seul angle, de cette façon, vous pouvez vous débarrasser de l'étape où vous devez faire une multiplication séquentielle. Cela se traduira effectivement par:
Ma matrice de rotation représente le résultat de la rotation autour de X et Y et Z.
plutôt que l'interprétation d'Euler de
Ma matrice de rotation représente la rotation autour de X puis Y puis Z.
Pour clarifier cela, je vais citer le théorème de rotation d'Euler de wikipedia:
Selon le théorème de rotation d'Euler, toute rotation ou séquence de rotations d'un corps rigide ou d'un système de coordonnées autour d'un point fixe équivaut à une seule rotation d'un angle donné θ autour d'un axe fixe (appelé axe d'Euler) qui traverse le point fixe. L'axe d'Euler est généralement représenté par un vecteur unitaire u →. Par conséquent, toute rotation en trois dimensions peut être représentée comme une combinaison d'un vecteur u → et d'un scalaire θ. Les quaternions donnent un moyen simple de coder cette représentation axe-angle en quatre nombres et d'appliquer la rotation correspondante à un vecteur de position représentant un point par rapport à l'origine dans R3.
Notez que la multiplication de 3 matrices représentera toujours 3 rotations séquentielles.
Maintenant, pour combiner les rotations autour de 3 axes, vous devez obtenir un seul axe et des angles simples qui représentent la rotation autour de X, Y, Z. En d'autres termes, vous devez utiliser une représentation Axe / Angle ou quaternion pour vous débarrasser des rotations séquentielles.
Cela se fait généralement en commençant par une orientation initiale (l'orientation peut être considérée comme un angle d'axe), généralement représentée comme un quaternion ou un angle d'axe, puis en modifiant cette orientation pour représenter l'orientation de votre destination. Par exemple, vous commencez par le quaterion d'identité, puis vous tournez par la différence pour atteindre l'orientation de destination. De cette façon, vous ne perdez aucun degré de liberté.