O que é um quaternion e como eles funcionam? Além disso, quais vantagens você ganha ao usar três pontos em um plano 2D? Finalmente, quando é considerado uma boa prática usar quaterniões?
mathematics
terminology
SirMathhman
fonte
fonte
Respostas:
Matematicamente, um quaternion é um número complexo com 4 dimensões. Mas no desenvolvimento de jogos, os Quaternions são frequentemente usados para descrever uma rotação no espaço 3D, codificando:
Observe que essas informações são codificadas com senos e co-senos dentro do quaternion; portanto, em geral, você não deve tentar definir ou ler explicitamente os componentes internos do quaternion (xyzw) individualmente. É fácil cometer um erro dessa maneira e obter um resultado sem significado. Uma biblioteca de matemática do quaternion geralmente fornece funções para operar em quaternions (por exemplo, convertendo-os para ângulos de Euler ou ângulo do eixo), o que garante que a matemática esteja correta e tenha o benefício de facilitar a leitura e compreensão do código.
Uma maneira alternativa de descrever rotações é descrever até que ponto girar em torno dos 3 eixos fixos 'x, ye z (também conhecidos como ângulos de Euler), que requerem apenas 3 números em vez de 4 e geralmente são mais intuitivos de usar. No entanto, os ângulos de Euler estão sujeitos a um problema chamado bloqueio do cardan : Quando você gira 90 ° em torno de um eixo, os outros dois eixos se tornam equivalentes. Com quaternions, esse problema não ocorre.
Outra maneira de expressar rotações no espaço 3D é com uma matriz de transformação 4x4 . Mas com uma matriz de transformação, você não pode apenas girar, mas também dimensionar, traduzir e inclinar. Quando você deseja apenas rotação, uma matriz seria um exagero e um quaternion uma solução muito mais rápida e simples.
Esse problema é relevante apenas no espaço 3D. No espaço 2D, você tem apenas um eixo de rotação. Qualquer rotação pode ser expressa com um único número de ponto flutuante ou um único número complexo, para que você não tenha esse problema. Embora você possa expressar teoricamente uma rotação em um plano 2d com um quaternion em que o eixo aponta para (ou fora) do plano, geralmente é um exagero.
fonte
Isso é para adicionar à resposta de @ Philipp.
Você realmente não precisa de quaternions se tudo o que você está interessado é girar no avião, ou seja, sobre o eixo z. Nesse caso, tudo o que você precisa é o ângulo de guinada e você pode explorar o fato de que rotações sucessivas sobre o eixo z são comutadas. Assim, você pode aplicar suas rotações na ordem que desejar.
A situação é diferente se você estiver girando em um avião que não é o plano XY. Essa rotação é equivalente a girar em torno de um eixo 3D arbitrário. Agora, você tem duas opções:
gire o seu avião em 3D para que ele coincida com o plano XY e, em seguida, guie e transforme de volta, ou
pense na sua rotação como sendo em 3D, para começar.
A segunda opção é mais fácil de codificar. Como o @Philipp disse, os quaternions evitam o bloqueio do cardan (se você evitar RPY intermediário ou conversões de eixo / ângulo).
Sempre que houver rotações em 3D, é uma boa prática usar quaternions.
Por exemplo:
Em Qt . Quats facilitam a interpolação entre rotações, como na função slerp .
O ROS os utiliza para transformar poses de robôs.
No mecanismo de dinâmica Bullet
Para uma aplicação muito sofisticada, consulte aqui o uso na mecânica 3D clássica.
fonte