O que é um quaternion?

50

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?

SirMathhman
fonte
Historicamente, acho que os quaternions vieram primeiro, e mais tarde os produtos de ponto e cruz foram derivados de quaternions.
2
Eu encontrei este artigo animado muito informativo: acko.net/blog/animate-your-way-to-glory-pt2/#quaternions
AShelly
Em matemática puros, creio quatérnions são 3 números complexos, tais como i² = j² = K² = IJK
Vinz243
Quaternions são a melhor maneira de interpolar suavemente rotações. Apenas interpolar matrizes de rotação não funciona, porque nem sempre você obtém uma matriz de rotação como resultado. A interpolação dos ângulos de Euler não resulta em uma rotação suave. Portanto, para animar rotações, como é necessário em computação gráfica ou robótica, os quaternions são o caminho a percorrer. E há um útil, mas de alguma forma não tão frequentemente utilizado extensão, chamado quaternions dupla que lhe permite representar transformação e rotação
Tobias B

Respostas:

43

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:

  1. um eixo de rotação (na forma de um vetor tridimensional)
  2. a que distância girar esse eixo

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.

Philipp
fonte
6
a trava do cardan não é um problema nos quaternions se você começar de quaternions e terminar com quaternions, a trava do cardan é ativada quando você tem uma etapa que se converte em ângulos de euler ou vice-versa.
catraca aberração
2
Quaternions não são eixo + ângulo, são 3 números complexos e uma escala.
transistor09
11
@ transistor09 você acreditaria que vocês dois estão certos? A parte imaginária de três componentes de um quaternião unitário pode ser interpretada como um vetor unitário ao longo do eixo de rotação, escalado pelo seno de metade do ângulo de rotação. A parte real da unidade quaternion é o cosseno de metade do ângulo de rotação. Portanto, você está certo que não é exatamente um formato de eixo angular, mas é verdade que os componentes de um quaternion podem ser interpretados como um eixo e uma medida (não linear) de quão longe girar em torno desse eixo.
DMGregory
2
Você também pode mencionar que vantagem os quaternions têm sobre uma matriz de rotação: eles são mais rápidos de combinar. Ao combinar rotações, multiplicar dois quaternions requer menos operações do que multiplicar matrizes.
Reintegrar Monica
3
Na verdade, no espaço 2D, números complexos são exatamente o análogo. Multiplique um ponto 2D por um número complexo e você o rotacionou - na verdade, é exatamente o mesmo que a rotação sin / cos usual (o que deve ser óbvio se você entender números complexos o suficiente). Isso pode ser um pouco explorado, mas, no final, os gráficos 2D não são tão intensivos em desempenho hoje em dia, por isso não proporcionam muitas melhorias, a menos que você esteja realmente confortável usando números complexos (o que a maioria das pessoas decididamente não é - como evidenciado pelo incrivelmente pobre código baseado em quaternion existente: D).
Luaan
13

Isso é para adicionar à resposta de @ Philipp.

Além disso, quais vantagens você ganha ao usar três pontos em um plano 2D?

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).

Finalmente, quando é considerado uma boa prática usar quaterniões?

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.

PKG
fonte
" Sempre que houver rotações em 3D, é uma boa prática usar quaternions." é um pouco forte demais. Quase sempre é melhor; há situações em que alternativas são apropriadas. (Como um exemplo de uma imperfeição, a raiz de ordem n de um quatérnion é multi-valorizado)
Yakk
11
Quaternions são uma mercadoria para usar e uma dor para implementar. Você pode se dar bem sem eles, se estiver ciente da trava do cardan.
Hatoru Hansou