J'essaie de créer un quaternion, de le faire tourner autour d'Euler-Angles et de le transformer en angles d'Euler. J'utilise Eigen. Convertir d'Euler en Quaternion et vice versa fonctionne très bien, mais quand je tourne autour de l'angle d'inclinaison mes valeurs sont environ 20 - 50%. Par exemple quand j'essaye de tourner de 0,0,0 à 90,50,60 j'obtiens x: 75,5 y: 103,13, z: 78,46. Des idées où je prends le mauvais virage? J'utilise la convention 102/YXZ. j'ai essayé de l'implémenter comme décrit ici: Rotate a quaternion by Euler angles input.Faire pivoter un quaternion avec des angles d'Euler en utilisant Eigen
Vector3f retVector;
Matrix3f rotFromMat, qautRotMatrix;
const auto fromPitch = xFrom*M_PI/360;
const auto fromYaw = zFrom*M_PI/360;
const auto fromRoll = yFrom*M_PI/360;
rotFromMat = AngleAxisf(fromRoll, Vector3f::UnitY())
* AngleAxisf(fromPitch, Vector3f::UnitX())
* AngleAxisf(fromYaw, Vector3f::UnitZ());
Quaternionf fromQuat(rotFromMat);
fromQuat.normalize();
fromQuat = fromQuat * AngleAxisf(yTo, Vector3f::UnitY());
fromQuat = fromQuat * AngleAxisf(xTo, Vector3f::UnitX());
fromQuat = fromQuat * AngleAxisf(zTo, Vector3f::UnitZ());
qautRotMatrix = fromQuat.toRotationMatrix();
retVector = quatRotMatrix.eulerAngles(1, 0, 2);
retVector *= 360/M_PI;
return retVector;
Lorsque vous faites pivoter de 90 degrés dans un axe quelconque dans euler-angle, un phénomène appelé «blocage de cardan» apparaît, et cela crée un comportement inattendu. L'avez-vous manipulé? –
Je convertis la matrice de rotation en quaternion avec "Quaternionf fromQuat (rotFromMat);" avant de tourner. La serrure de cardan devrait être aucun problème. –