2016-08-23 3 views
0

J'ai des données de quaternion que j'essaie de passer d'un espace de coordonnées Y-up droit à un espace de coordonnées Z-up gaucher. En lisant cela, je dois faire switch the chirality.Changer la chiralité d'un quaternion dans le code?

La seule information que je peux trouver est this

Et je ne peux pas envelopper la tête autour d'elle.

dire que j'ai mon Quaternion comme:

public static float[] quat= new float[4](0.70711,0.70711,0,0); 

En C# code, comment interrupteur I la chiralité? J'ai essayé d'annuler l'axe, et d'échanger simplement les valeurs Z et Y. J'ai essayé de multiplier le quaternion par un autre quaternion égal à 90 degrés, comme suggéré dans ce lien. et toujours voir des rotations incorrectes.

Merci.

+0

Est-ce un processus hors ligne? Pouvez-vous juste faire quat -> matrix puis swap/nier les lignes/colonnes si besoin est, puis faire matrix -> quat again? – samgak

+0

C'est en temps réel, donc la latence est un facteur. Je peux essayer ça! Connaissez-vous un exemple dans C#? – anti

+0

Je ne suis pas au courant sur un, désolé. – samgak

Répondre

1

En supposant que votre système de coordonnées original A a X à droite, Y à la hauteur, Z à la caméra. Le nouveau système de coordonnées B a X à droite, Y à la caméra et Z à la hausse. Donc, vous devez essentiellement échanger les axes Y et Z. Droit jusqu'à présent? Et vous avez un quaternion q qui décrit une rotation dans le système A. Vous voulez trouver un quaternion r qui décrit la même rotation dans le système B.

Il est préférable de considérer probablement dans le contexte de la façon dont vous Convertir l'angle et l'axe en quaternion. Dans Wikipedia on peut lire que vous avez décrit une rotation d'un angle θ autour d'un axe avec le vecteur de direction de l'unité (x, y, z) en utilisant

q = cos (θ/2) + sin (θ/2) (xi + yj + zk)

Que fait le système de coordonnées en fonction de votre angle et de votre axe? Eh bien, les coordonnées de l'axe subissent le même échange de coordonnées que vos points, et l'angle change de signe. Vous avez donc

cos (-θ/2) + sin (-θ/2) (xi + ZJ + yk)

Par rapport à ce qui précède, la partie réelle ne change pas (depuis cos (x) = cos (- x)) mais les parties imaginaires changent leur signe, en plus du changement d'ordre. En généralisant cela, un quaternion a + bi + cj + dk décrivant une rotation dans l'ancien système de coordonnées serait transformé en a - bi - dj - ck dans le nouveau système de coordonnées.