Avertissement: Je suis un programmeur de jeux professionnel et j'utilise des quaternions la plupart du temps, mais ils sont proches de la magie noire pour moi. Je suis relativement à l'aise avec les mathématiques mais les nombres imaginaires m'ont toujours dérouté. J'ai tendance à considérer les quats comme utiles et à inverser les multiplications plus d'une fois. J'essaie de les raisonner comme je le ferais avec des matrices avec un succès limité.
De toute façon....
Ce qui me déconcerte, c'est ce qui suit. Lorsque je veux faire pivoter un objet autour de son axe local, je multiplie sa rotation par le quaternion qui représente la rotation que je veux appliquer. Il s'agit donc d'une rotation dans l'espace local.
Maintenant, si je veux le faire pivoter autour d'un axe dans l'espace mondial, mon raisonnement serait: Prenez la rotation dans l'espace mondial comme un quaternion. Multipliez l'inverse de la rotation de mon objet avec ce quaternion. Cela apportera ma rotation mondiale dans l'espace local. Multipliez ma rotation avec ce nouveau quaternion. ie: newRot = oldRot * (inverse oldRot * worldRot)
Cependant, ce que je dois faire est newRot = oldRot * (inverse oldRot * worldRot) * oldRot.
Pourquoi dois-je, après avoir multiplié avec le quat inverse, multiplier avec mon propre quat avant de l'appliquer? Je sais qu'il doit y avoir une raison parfaitement valable, mais je ne peux pas raisonner pour m'en sortir et c'est frustrant pour moi. J'ai essayé les diverses faqs et ainsi de suite, mais la plupart vont au plus profond des mathématiques, ce qui est moins clair pour moi.
Quelqu'un qui peut m'expliquer cela comme si j'avais 5 ans?
la source
I try to reason about them like I would with matrices
- alors vous êtes sur la bonne voie. Si vous avez compris comment faire pivoter autour des axes des objets et des axes du monde en utilisant des matrices, vous pouvez faire de même en utilisant des quaternions. L'ordre de multiplication est le même pour les matrices et les quaternions.Réponses:
Les quaternions sont associatifs:
vous mentionnez que votre solution est:
ce qui équivaut à:
ce qui équivaut à:
ce qui vous ramène à ce qui se passe réellement:
L'ordre d'application change, c'est tout. Pour en revenir aux matrices, lorsque vous appliquez une matrice d'objet à une matrice de transformation et que vous la stockez en tant que nouvelle matrice d'objet, c'est votre transformation d'espace local. Lorsque vous appliquez la matrice de transformation à la matrice d'objet et que vous la stockez, c'est votre transformation du monde. Tout dépend de l'ordre d'application et rien de plus.
la source