閱讀本文需要一些前置知識,需理解向量點積與叉積的基本知識。以下給出大致定義(因為矩陣在這裡用不到,就不寫矩陣形式了)以幫助理解
- 向量點積
- v⋅j=∣∣v∣∣∣∣j∣∣cosθ
- 幾何解釋為 向量 v 在 向量 j 上投影的模長乘以向量 j 的模長
- 向量叉積
- v×j=∣∣v∣∣∣∣j∣∣sinθ
- 叉積只有在三維下才有幾何意義,其解釋為同時與向量 v 與向量 j 垂直的向量,且該向量模長為向量 v 與向量 j 構成的平行四邊形的面積
另外需要注意的是,本文基於右手系分析,旋轉方向正負可由右手定則判斷。
羅德里格旋轉公式#
已知旋轉軸 f ,此時有向量 v 繞旋轉軸旋轉 θ 角,求旋轉後的 v′。如下圖
因為旋轉軸的長度並不影響旋轉,為了方便求解,定義 ∣∣f∣∣=1。此時分解 v 至平面( v∥ )與旋轉軸( v⊥ )上。如下圖
由於 v∥ 可視為 v 在 f 上的投影,顯然可以使用點積來表示
即 v∥=∣∣f∣∣v⋅f∣∣f∣∣f
這裡解釋一下為什麼這麼寫,上面對於點積的介紹已經很明確了即點積的結果表示為向量 v 在 向量 f 上投影的模長乘以向量 f 的模長,也就是說我們如果需要單獨獲得 ∣∣v∥∣∣ 時需要將結果除以 ∣∣f∣∣ ,而此時我們得到的是一個值而非向量,且 v∥∥f 也就是兩者同向,於是我們可通過將值乘以 f 的方向即可得到 v∥。而又因為 ∣∣f∣∣ 為 1,則可化簡為
v∥=(v⋅f)f
此時也可以得到 v⊥
v⊥=v−v∥=v−(v⋅f)f
目前已經得到的結果
{v∥=(v⋅f)fv⊥=v−(v⋅f)f
現在我們對 v′ 進行分解,可發現 v∥=v∥′ ,唯一的不同在平面上的分解。
此時我們引入輔助向量 w 該向量垂直於 v⊥
∵⎩⎨⎧w⊥fw⊥v⊥∣∣f∣∣=1∣∣w∣∣=∣∣v⊥∣∣
∴w=f×v⊥
因為我們最終的目標是通過 v⊥′ 求解 v′ ,那麼接下來需要分解 v⊥′ 為 v1 與 v2 ,通過已知的 w 與 v⊥ 來表達(求解思路和上面的 v 平行是相同的)
v1=∣∣w∣∣v⊥′⋅w∣∣w∣∣w=∣∣w∣∣∣∣v⊥′∣∣∣∣w∣∣cos(90°−θ)∣∣w∣∣w=wsinθ
v2=∣∣v⊥∣∣v⊥′⋅v⊥∣∣v⊥∣∣v⊥=∣∣v⊥∣∣∣∣v⊥′∣∣∣∣v⊥∣∣cos(θ)∣∣v⊥∣∣v⊥=v⊥cosθ
v⊥′=v1+v2=wsinθ+v⊥cosθ
∵w=f×v⊥
∴v⊥′=v⊥cosθ+(f×v⊥)sinθ
v′=v⊥′+v∥′=v⊥cosθ+(f×(v−v∥))sinθ+v∥
∵f∥v∥∴f×v∥=0
v′=v∥+cosθv⊥+(f×v)sinθ
∵{v∥=(v⋅f)fv⊥=v−(v⋅f)f
∴v′=(1−cosθ)(f⋅v)f+cosθv+sinθ(f×v)
求證結束,此時我們得到了軸角式的旋轉公式。
參考資料#
《動手學機器人學》(5)(一般形式旋轉矩陣公式)或(羅德里格旋轉公式)或(軸角法)證明 and 齊次坐標變換