J'ai besoin de compenser les données de quaternion en streaming d'une quantité spécifique. Pour ce faire, je prévois d'obtenir la différence entre les deux, puis compenser le premier par le second.Trouver la différence de rotation entre deux quaternions pour calibrer deux systèmes de coordonnées
J'ai du mal à trouver la différence entre les 2.
Je suis en cours d'exécution de ce code:
public void convertQuat180()
{
Quaternion q = new Quaternion(0.65328f, 0.2706f, 0.65328f, -0.2706f); //45,180,0
Quaternion q180 = new Quaternion(0.70711f, 0, 0.70711f, 0); // 0,90,0
Quaternion result = q180 * Quaternion.Inverse(q);
Console.WriteLine(result);
}
je me attends result
être:
(euler) diff = 45, 90 , 0
Mais au lieu que je reçois:
135,-180,0
Où vais-je pas ici?
Je ne suis pas sûr s'il est logique d'imaginer cela en utilisant des angles d'Euler. La rotation de la différence n'aura vraisemblablement pas d'angles qui sont la différence des deux rotations de la source. Quoi qu'il en soit, avec la formule ci-dessus, vous obtenez une rotation, telle que 'result * q = q180'. N'est-ce pas ce que tu voulais? –
ok, peut-être que je devrais m'en tenir à quats pour tester. Je suis nouveau pour eux, et j'ai beaucoup plus de facilité à imaginer des eulers! Le code ci-dessus est-il valide pour trouver la différence? Et puis comment pourrais-je appliquer cette différence au quat d'origine? – anti
Le problème des angles d'Euler est que les axes ne peuvent pas être vus indépendamment les uns des autres. S'en tenir aux quaternions ou matrices de rotation semble être la meilleure alternative pour ce scénario. Vous mettez à jour une rotation représentée par un quaternion par simple multiplication (voir mon premier commentaire). Mais bien sûr, cela vous ramènera au point de départ. –