2011-06-13 4 views
0

Tout d'abord, j'ai fait beaucoup de recherches sur googling et d'autres posts sur stackoverflow, mais je ne peux pas obtenir de réponse ou de code de travail. Les maths ne sont pas ma force. Je dois avoir une routine qui prend un point de caméra (CX, CY, CZ) et le faire pivoter autour d'un point de recherche (LX, LY, LZ) de trois angles de rotation (RX, RY, RZ). En utilisant des rotations euler conduit à la serrure de cardan dans certains cas que je dois éviter. J'ai donc entendu parler de l'utilisation de quaternions.Rotation du point Euler 3D à l'aide de Quaternions pour éviter le verrouillage du cardan

Je trouve cela pour convertir les rotations en un quaternion http://www.euclideanspace.com/maths/geometry/rotations/conversions/eulerToQuaternion/index.htm

et cela pour convertir d'un quaternion retour EULER rotation XYZ http://www.euclideanspace.com/maths/geometry/rotations/conversions/quaternionToEuler/index.htm

Ils semblent fonctionner très bien, mais je dois savoir comment utiliser le quaternion pour faire tourner le CX, CY, CZ autour de LX, LY, LZ et ensuite retourner le nouveau CX, CY, CZ sans problèmes de verrouillage du cardan.

Il ya tellement de choses à ce sujet, que je suis sûr qu'une bonne explication et un petit bout de code aideront non seulement moi, mais beaucoup d'autres dans le futur.

Alors s'il vous plaît aider si vous le pouvez. Merci beaucoup.

Répondre

2

La réponse, si le quaternion est Q et le nouveau point de la caméra est C »:

C' = Q*(C-L)*Q^-1 + L 

où les points sont augmentés avec Cw = 0 et multiplication et inverse sont selon quaternion règles.

Spécifiquement, soit D = C - L. Ensuite, nous allons F = Q * D:

Fw = Qw*0 - Qx*Dx - Qy*Dy - Qz*Dz 
Fx = Qw*Dx + Qx*0 + Qy*Dz - Qz*Dy 
Fy = Qw*Dy - Qx*Dz + Qy*0 + Qz*Dx 
Fz = Qw*Dz + Qx*Dy - Qy*Dx + Qz*0 

Enfin, nous obtenons C »= F * Q^-1 + L:

Cw' = 0 
Cx' = Fw*Qx - Fx*Qw + Fy*Qz - Fz*Qy + Lx 
Cy' = Fw*Qy - Fx*Qz - Fy*Qw + Fz*Qx + Ly 
Cz' = Fw*Qz + Fx*Qy - Fy*Qx - Fz*Qw + Lz 

Toutefois, sachez que si vous Créons le quaternion à partir d'une représentation d'Euler, vous vous retrouverez avec un verrou à cardan. Le verrou cardan est une propriété de la représentation d'Euler et le quaternion représentera simplement la même transformation. Pour vous débarrasser du verrou de cardan, vous devez éviter complètement la représentation d'Euler, à moins que je ne comprenne mal comment vous l'utilisez.

+0

Merci pour les conseils. Donc, si la conversion d'euler en qualternion conduit toujours à un verrouillage de cardan, comment puis-je prendre la position de la caméra dans l'espace 3D et le faire pivoter sans problème? Si j'ai l'emplacement de la caméra XYZ et les angles de rotation? Je suppose que je ne vois pas l'image totale, mais il devrait y avoir un moyen simple de prendre une position de caméra et de la faire tourner autour des 3 axiis en même temps sans verrou cardan? Ou est-ce naïf? – TallGuy

Questions connexes