1. 程式人生 > >四元數表示向量V1到V2的旋轉的兩種演算法

四元數表示向量V1到V2的旋轉的兩種演算法

版權宣告:本文為博主原創文章,未經博主允許不得轉載。

博主:shenshikexmu

聯絡方式:[email protected]

本文的演算法來源於stackoverflow 的回答finding quaternion representing the rotation from one vector to another

問題

如下圖,三維空間中的向量 v 1

繞著單位向量 u 旋轉 θ 角後,形成
" role="presentation"> v 2 。已知 v 1
v 2 求出代表向量間旋轉的四元數。

這裡寫圖片描述
當知道單位向量 u θ 角時,這個四元數表示起來很簡單。
q = cos θ 2 + sin θ 2 u
也就是:
q 0 = cos θ 2
q 1 = sin θ 2 u . x
q 2 = sin θ 2 u . y
q 3 = sin θ 2 u . z

v 1 v 2 已知的條件下,角 θ 可以利用 v 1 v 2 內積,也就是 乘計算出來,向量 u 可以利用 v 1 v 2 外積,也就是 × 乘計算出來。

設:
v 1 方向上的單位向量為 n v 1 長度為a。於是 v 1 = a n v 1
v 2 方向上的單位向量為 n v 2 長度為b。於是 v 2 = b n v 2
u 已經為單位向量。
那麼有如下關係:
v 1 v 2 = a b cos θ
v 1 × v 2 = a b sin θ u

演算法1

這裡寫圖片描述
思路:尋找 v 1 v 2 中間的向量 h a l f ,這樣 v 1