O problema das rotações é que, a maioria das pessoas pensa nisso em termos de ângulos de Euler, pois são fáceis de entender.
No entanto, a maioria das pessoas esquece o ponto em que Euler são três ângulos seqüenciais . Isso significa que a rotação ao redor do primeiro eixo fará com que a próxima rotação seja relativa à primeira rotação original; portanto, você não pode girar independentemente um vetor em torno de cada um dos três eixos usando ângulos de Euler.
Isso se traduz diretamente em matrizes quando você multiplica duas matrizes. Você pode pensar nessa multiplicação como transformar uma matriz no espaço da outra matriz.
Isso deve acontecer com quaisquer três rotações sequenciais, mesmo ao usar quaternions.
Quero enfatizar o fato de que os quaternions não são uma solução para o bloqueio flexível. Na verdade, o bloqueio flexível sempre acontecerá se você representou os ângulos de Euler usando quaterniões. O problema não é a representação, o problema é a três etapas seqüenciais.
A solução?
A solução para girar um vetor em torno de 3 eixos de forma independente é combinar um único eixo e um único ângulo, dessa forma você pode se livrar da etapa em que é necessário fazer uma multiplicação seqüencial. Isso se traduzirá efetivamente em:
Minha matriz de rotação representa o resultado da rotação em torno de X, Y e Z.
ao invés da interpretação de Euler de
Minha matriz de rotação representa a rotação em torno de X, depois Y e Z.
Para esclarecer isso, citarei o teorema da rotação de wikipedia Euler:
De acordo com o teorema da rotação de Euler, qualquer rotação ou sequência de rotações de um corpo rígido ou sistema de coordenadas sobre um ponto fixo é equivalente a uma única rotação por um determinado ângulo θ em torno de um eixo fixo (chamado eixo de Euler) que atravessa o ponto fixo. O eixo de Euler é normalmente representado por um vetor de unidade u →. Portanto, qualquer rotação em três dimensões pode ser representada como uma combinação de um vetor u → e um escalar θ. Os quaternions fornecem uma maneira simples de codificar essa representação eixo-ângulo em quatro números e de aplicar a rotação correspondente a um vetor de posição que representa um ponto relativo à origem em R3.
Observe que a multiplicação de 3 matrizes sempre representará 3 rotações seqüenciais.
Agora, para combinar rotações em torno de 3 eixos, é necessário obter um único eixo e ângulos únicos que representam a rotação em torno de X, Y, Z. Em outras palavras, você precisa usar uma representação de eixo / ângulo ou quaternário para se livrar das rotações seqüenciais.
Isso geralmente é feito, iniciando com uma orientação inicial (a orientação pode ser vista como um ângulo de eixo), geralmente representada como um quaternião ou um ângulo de eixo, e modificando essa oração para representar sua orientação de destino. Por exemplo, você começa com a pergunta de identidade e depois gira pela diferença para alcançar a orientação de destino. Dessa forma, você não perde nenhum grau de liberdade.