5 votos

¿Cómo entender y crear cuaterniones?

Tengo que multiplicar dos cuaterniones para calcular un interpolación lineal esférica entre dos $R^3$ sistemas de coordenadas dentro del intervalo $t = [0, 1]$ .

enter image description here

I comprender cómo hacer el cálculo de los cuaterniones básicamente funciona y cómo hacer el slerp. Hay mucha literatura disponible.

Pero yo no sé cómo empezar: ¿Cómo crear cuaterniones iniciales a partir de unos ejes y ángulos del sistema de coordenadas dados? Supongo que no entiendo el significado de los cuaterniones.

0voto

Shingaling Puntos 87

En el espacio 3D, las coordenadas iniciales se deciden por las coordenadas de la mano izquierda y de la mano derecha, a veces denominadas convenciones x-up, y-up, z-up, que también se pueden encontrar (por ejemplo) en la Wiki EulerAngles artículo.

Se definen los cuaterniones iniciales correspondientes a los x-y-z iniciales

Por ejemplo, coordenadas x-y-z-derecha, entonces 0,0,0,1 sería el cuaternión inicial.

Por supuesto, el orden también depende de la configuración del programa.

Por ejemplo, tal vez DirectX y openGL estén en diferentes órdenes del cuaternión inicial de las mismas coordenadas.

Y también sus programas propios podrían en un orden inicial arbitrario.

Sin embargo, cuando se define un orden inicial (correspondiente a x-y-z), los otros 23 órdenes también pueden estar bien definidos.

4!

(*
    24
*)

24 es el número de tipos de órdenes. Cuando decido qué orden se utilizó en un motor de juego 3D que no puedo conocer el orden por especificación, hago experimentos.

Tal vez podrías encontrar un programa de Matriz a Cuaternión, y luego hacer rotaciones en Matriz, luego convertir la matriz final combinada a Cuaterniones te llevará a una buena comprensión.

0voto

Peter Kämpf Puntos 255

Bien, creo que lo tengo . El cuaternión se crea así:

$$q = \begin{pmatrix} a_x \cdot \sin{\frac{\alpha}{2}} \\ a_y \cdot \sin{\frac{\alpha}{2}} \\ a_z \cdot \sin{\frac{\alpha}{2}} \\ \cos{\frac{\alpha}{2}} \end{pmatrix}$$

Tengo un cuaternión para cada eje. Cada eje es un vector (con tres coordenadas) y está alineado a lo largo de un determinado ángulo. Son seis cuaterniones en total para dos sistemas de coordenadas:

$$q_{x1} = \begin{pmatrix} \sin{\frac{\alpha_{x1}}{2}} \\ 0 \\ 0 \\ \cos{\frac{\alpha_{x1}}{2}} \end{pmatrix}, q_{y1} = \begin{pmatrix} 0 \\ \sin{\frac{\alpha_{y1}}{2}} \\ 0 \\ \cos{\frac{\alpha_{y1}}{2}} \end{pmatrix}, q_{z1} = \begin{pmatrix} 0 \\ 0 \\ \sin{\frac{\alpha_{z1}}{2}} \\ \cos{\frac{\alpha_{z1}}{2}} \end{pmatrix} $$

y

$$q_{x2} = \begin{pmatrix} \sin{\frac{\alpha_{x2}}{2}} \\ 0 \\ 0 \\ \cos{\frac{\alpha_{x2}}{2}} \end{pmatrix}, q_{y2} = \begin{pmatrix} 0 \\ \sin{\frac{\alpha_{y2}}{2}} \\ 0 \\ \cos{\frac{\alpha_{y2}}{2}} \end{pmatrix}, q_{z2} = \begin{pmatrix} 0 \\ 0 \\ \sin{\frac{\alpha_{z2}}{2}} \\ \cos{\frac{\alpha_{z2}}{2}} \end{pmatrix} $$

Los cuaterniones anteriores son cuaterniones unitarios normalizados y ya simplificados, porque para el eje x $a_x = 1$ , $a_y = 0$ y $a_z = 0$ y así sucesivamente: $ a_x^2 + a_y^2 + a_z^2 = 1$ .

0voto

Muphrid Puntos 12245

Dados 3 vectores iniciales $\hat x_0, \hat y_0, \hat z_0$ (quats imaginarios puros) que describen las direcciones iniciales de los ejes, la dirección actual de cada eje se puede encontrar mediante

$$\hat x = q \hat x_0 q^{-1}$$

y así sucesivamente. No deberías necesitar llevar la cuenta de más de cuatro quats en ningún momento: 3 que describan los ejes en un cuadro y $q$ para describir la rotación global del marco a otro marco.

i-Ciencias.com

I-Ciencias es una comunidad de estudiantes y amantes de la ciencia en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X