2012-04-19 13 views
5

Tengo un par de vectores. ¿Cómo puedo crear un cuaternión que gire de uno a otro?Obteniendo quaternion para rotar entre dos vectores

+0

posible duplicado de [Encontrar quaternion que representa la rotación de un vector a otro] (http://stackoverflow.com/questions/1171849/finding-quaternion-representating-the-rotation-from-one-vector-to-another) – Boann

Respuesta

9

un cuaternión unidad q = cos (F) + u * sin (F) representa la rotación del vector v por el ángulo 2 * F alrededor del eje u.

Si los vectores son v y w, entonces deberíamos normalizarlos, a continuación, calcular el ángulo entre ellos como 2 * F = ArcCos (DOT (v , w)). Vector de dirección del eje de rotación u = Normalizar (VectorProduct (v, w)). Ahora podemos construir el cuaternión de rotación requerido.

+1

También podría ser una buena idea normalizar el eje de rotación ** u ** después de haber sido calculado para sostener un cuaternión de la unidad, ya que el producto cruzado de dos vectores unitarios solo está normalizado para los vectores de entrada ortogonales. –

+0

@Christian Rau Tienes razón, me he perdido esta normalización. Adicional. – MBo

+4

Tenga en cuenta que el caso v = -w necesita un manejo especial. –

Cuestiones relacionadas