2010-02-17 7 views
1

J'ai besoin d'un moyen d'obtenir des angles d'Euler pour la rotation dans un cadre de référence global d'un local. J'utilise C#, wpf 3d et un gyroscope. J'ai un globe sur l'écran qui devrait se déplacer de la même manière que le gyroscope. Puisque le gyro envoie un mouvement par rapport à lui-même, j'ai besoin d'utiliser des quaternions pour garder l'état de l'objet et le mettre à jour mais je suis bloqué. Si je fais ce qui suit:Traduire Rotation de quaternion locale en global (gyro)

   var qu=eulerToQ(Gyro.X,Gyro.Y,Gyro.Z); 
       GlobalQu = Quaternion.Multiply(qu, GlobalQu); 

IT tourne correctement sur un axe. Quand je tourne par A dans un sens puis par B dans un autre les rotations de l'objet et du gyroscope ne sont plus dans le même sens car ce qui précède fonctionne pour des rotations absolues (par rapport au monde).

Par exemple:

    var qu=eulerToQ(KeyboardValue1,KeyboardValue2,KeyboardValue3); 
        GlobalQu = qu; 

Cela fonctionne parce que je suis, rallonger la course tangage, lacet-à-dire les valeurs de clavier via le clavier toujours sur l'axe global. Gyro envoie des rotations sur l'axe LOCAL.

Changement de l'ordre de rotation quaternion ne contribue pas

    var qu=eulerToQ(Giro.X,Giro.Y,Giro.Z); 
        GlobalQu = Quaternion.Multiply(GlobalQu,qu); 

Répondre

3

Ceci est en fait la bonne façon. Si vous multipliez globalQuaternion * newQuaternion vous obtenez la rotation globale et newQuaternion * globalQuaternion alors vous obtenez la rotation locale. J'ai simplement eu une erreur en générant mon quaternion.

2

Vous dites que vous avez un gyroscope. Est-ce un gyroscope physique? Un gyroscope, en lui-même, ne peut générer que des informations de débit angulaire. Y-a-t-il des appareils électroniques qui y sont rattachés qui produisent des angles et non des taux angulaires? Il y a douze séquences possibles de rotation d'angle d'Euler; chacun a une conversion mathématique différente en quaternion. Vous avez seulement une chance sur douze que l'ordre des angles provenant de votre gyro soit le même que l'ordre dans lequel votre eulertoQ fonctionne. Voici un cahier blanc d'euler à quaternion que j'ai écrit il y a plusieurs années.