Como uso corretamente quaternions duplos para rotação e tradução de um objeto?

7

Até agora, eu lidei com a rotação e a tradução de um determinado objeto separadamente, usando quaternions normais para rotação e vetores para tradução. No entanto, eu gostaria de usar quaternions duplos para lidar com a tradução e a rotação de um objeto, pois planejo usá-los posteriormente para uma dinâmica corporal rígida. Basicamente, quero que eu possa ter um objeto com um quaternário duplo inicial, multiplique esse dual por um segundo quaternário duplo que descreva a mudança em seu deslocamento e termine com um terceiro quaternário dual que descreva sua posição final após a alteração ser aplicada. Quero que um determinado objeto (usarei uma esfera como exemplo) gire localmente em torno de seu próprio centro de massa, mas se mova globalmente. Aqui está um vídeo do tipo de movimento que estou procurando que aparentemente foi realizado usando quaterniões duplas:

http://www.youtube.com/watch?v=k9I7Bbj02O8

Infelizmente, o link para este código fonte de exemplos não é carregado. Agora eu tentei fazer isso funcionar várias vezes, no entanto, o objeto que estou deslocando (novamente uma esfera) se moverá globalmente, mas não girará localmente ou girará localmente, mas não se moverá globalmente (seu movimento é baseado em como é girado). Basicamente, isso resume o que estou fazendo:

1) No início do programa, tenho um objeto com um quaternário duplo inicial descrevendo sua posição e rotação (chamarei de quaternário Q1).

2) Altero a velocidade de rotação e / ou translação do objeto. A partir disso, calculo um segundo quaternário, Q2, que descreve sua mudança na rotação e aceleração.

3) Em seguida, multiplico os dois quaternions (tentei as duas ordens de multiplicação neste momento, mas acredito que a ordem correta deve ser Q2 * Q1). A fórmula que estou usando para multiplicá-los é Q1 * Q2 = r1 * r2 + e (r1 * d2 + d1 * r2).

4) Neste ponto, tenho um terceiro quaternário duplo que deve descrever a nova localização e orientação do objeto. A parte real do dual é um quaternion que descreve sua orientação e a parte dual pode ser convertida em um vetor de tradução usando a fórmula t = 2 * dual * (real ') onde real' é o conjugado da parte real do terceiro dual quaternion.

No entanto, este método não está produzindo os resultados que desejo. Os resultados que eu estou obtendo são previsíveis, eles simplesmente não são do tipo que estou procurando, ou seja, rotação local, mas tradução global. Alguém poderia me dizer o método correto de fazer isso?

1101
fonte
Recentemente, encontrei este artigo iri.upc.edu/people/thomas/papers/IEEE-TRO-2014.pdf que me ajudou muito a entender o uso de quaterniões duplos. Espero que isto ajude.

Respostas:

3

Bem, caso você ainda tenha interesse, se quiser começar com o quaternion duplo - apenas a transformação básica - para frente e para trás (ou seja, transformações rígidas) - você pode querer dar uma olhada em um artigo para iniciantes sobre o assunto

Um guia para iniciantes de quaterniões duplos: o que são, como funcionam e como usá-los para hierarquias de personagens 3D

Link: http://wscg.zcu.cz/wscg2012/short/A29-full.pdf

Comida por enquanto,

Simons

BinarySimons
fonte