2016-08-30 4 views
1

J'ai un quaternion, provenant d'un système avec les éléments suivants:Changer les axes et la latéralité d'un quaternion?

Right handed. 
Forward direction: Y axis 
Right direction: X axis 
Up direction: Z axis 

J'ai besoin de convertir en un système de coordonnées est:

left-handed. 
Forward direction: X axis 
Right direction: Y axis 
Up direction: Z axis 

J'ai essayé nier l'axe, et l'angle , J'ai essayé de changer les valeurs, je n'arrive pas à faire fonctionner ça. Toute l'aide grandement appréciée! Je travaille en C#, avec

Microsoft.Xna.Quaternion. 

Répondre

2

Un quaternion est une structure de quatre valeurs (w, x, y, z). Si elle représente une rotation, alors w = cos(phi/2) (phi étant l'angle de rotation) et (x, y, z) = sin(phi/2) * (ax, ay, az) ((ax, ay, az) étant l'axe de rotation).

Pour convertir le quaternion en un autre système, il suffit de transformer l'axe de rotation. Pour exemple, la transformation est:

/0 1 0 \ 
T = | 1 0 0 | 
    \ 0 0 1/

Enfin, puisque vous changez latéralité, vous devez inverser le quaternion ou il tourne dans le mauvais sens. Résumant, le quaternion transformé est:

(w*, x*, y*, z*) = (w, -y, -x, -z) 

En général:

(x*, y*, z*) = det(T) T (x, y, z) //Assuming column vectors