Disclaimer: Eu sou um programador profissional de jogos, e uso quaternions na maioria dos dias, mas eles estão perto de magia negra para mim. Estou relativamente à vontade com a matemática, mas os números imaginários sempre me confundem. Costumo tratar quats como útil e acabo revertendo multiplicações mais de uma vez. Tento argumentar sobre eles como faria com matrizes com sucesso limitado.
De qualquer forma ....
O que me deixa perplexo é o seguinte. Quando quero girar um objeto em torno de seu eixo local, multiplico sua rotação pelo quaternion que representa a rotação que quero aplicar. É, portanto, uma rotação no espaço local.
Agora, se eu quiser girá-lo em torno de um eixo no espaço mundial, meu raciocínio seria: Faça a rotação no espaço mundial como um quaternion. Multiplique o inverso da minha rotação de objetos com este quaternion. Isso trará a rotação do meu mundo no espaço local. Multiplique minha rotação com este novo quaternion. ie: newRot = oldRot * (inverso oldRot * worldRot)
No entanto, o que eu preciso fazer é newRot = oldRot * (inverso oldRot * worldRot) * oldRot.
Por que, depois de multiplicar com o quat inverso, ainda preciso multiplicar com o meu próprio quat antes de aplicá-lo? Eu sei que deve haver uma razão válida perfeita, mas não consigo pensar em como sair dela e isso é frustrante para mim. Eu tentei as várias perguntas frequentes e outros enfeites, mas a maioria vai fundo na matemática, deixando menos claro para mim.
Alguém que possa me explicar isso como se eu tivesse 5 anos?
I try to reason about them like I would with matrices
- então você está no caminho certo. Se você entendeu como girar em torno dos eixos dos objetos e dos eixos do mundo usando matrizes, pode fazer o mesmo usando quaternions. A ordem de multiplicação é a mesma para matrizes e quaterniões.