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?
fonte
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.Respostas:
Quaternions são associativos:
você menciona que sua solução é:
que é o mesmo que:
que é o mesmo que:
o que realmente o leva de volta ao que realmente está acontecendo:
A ordem de aplicação está mudando, isso é tudo. Voltando às matrizes, quando você aplica uma matriz de objetos a uma matriz de transformação e armazena isso como sua nova matriz de objetos, essa é a transformação do espaço local. Quando você aplica a matriz de transformação à matriz de objetos e armazena isso, é a transformação do mundo. É tudo sobre a ordem de aplicação e nada mais.
fonte