2012-04-19 16 views
5

Ho una coppia di vettori. Come posso creare un quaternione che ruota da uno all'altro?Ottenere quaternion per ruotare tra due vettori

+0

possibile duplicato di [Ricerca di quaternioni che rappresentano la rotazione da un vettore a un altro] (http://stackoverflow.com/questions/1171849/finding-quaternion-representing-the-rotation-from-one-vector-to-another – Boann

risposta

9

Un'unità quaternioni q = cos (F) + u * sin (F) rappresenta la rotazione del vettore v dall'angolo 2 * F attorno all'asse u.

Se i vettori sono v e w, allora dovremmo normalizzarle, quindi calcolare l'angolo tra loro come 2 * F = ArcCos (Dot (v, w)). Vettore di direzione dell'asse di rotazione u = Normalizza (VectorProduct (v, w)). Ora possiamo creare quaternioni di rotazione richiesti.

+1

Potrebbe anche essere una buona idea normalizzare l'asse di rotazione ** u ** dopo che è stato calcolato per sostenere un quaternione di unità, in quanto il prodotto incrociato di due vettori di unità è normalizzato solo per vettori di input ortogonali. –

+0

@Christian Rau Hai ragione, ho perso questa normalizzazione. Aggiunto. – MBo

+4

Si noti che il caso v = -w richiede una gestione speciale. –

Problemi correlati