3D數學筆記 任意軸旋轉

2021-09-28 18:38:17 字數 1580 閱讀 2185

——題記

公式:    

v ′ = (v · n) n+(v - (v · n) n)cos(θ)+sin(θ)(u x v)

表示三維空間旋轉的方法有很多,這裡關注軸角式,並採用右手座標系;

如圖:有旋轉軸 u = (x、y、z),我們希望向量v,沿著這個旋轉軸旋轉θ度,變換到v ′。

我們來變換一下v ′;

1.   旋轉的分解

首先,我們可以將v分解為平行於旋轉軸u以及正交與u的兩個分量,v∥和v⊥,既:

v = v∥ + v⊥

我們可以分別旋轉這兩個分向量,再將它們旋轉的結果相加獲得旋轉後的向量v ′:

v ′ = v ′ ∥ + v ′ ⊥

v的分解圖

v∥其實就是v在u上的投影,經過觀察得出:

因為 v = v∥ + v⊥,我們可以得到:

既然我們已經知道怎麼分解 v,接下來我們只需要分別討論對 v∥ 和 v⊥ 的旋轉就可 以了

2.  v∥ 的旋轉

v∥ 其實根本沒有被旋轉,因為與旋轉軸u重合,所以:

v ′ ∥ = v∥

3.   v⊥ 的旋轉

接下來,我們需要處理正交與u的 v⊥,因為這兩個向量是正交的,這個旋轉可以看做是平面內的乙個旋轉。如下圖,右側的為俯檢視:

現在,3d 的旋轉就被我們轉化為了 2d 平面上的旋轉.由於在這個平面上我們只 14 有乙個向量 v⊥,用它來表示乙個旋轉是不夠的,我們還需要構造乙個同時正交於 u 和 v⊥ 的向量 w,這個可以通過叉乘來獲得:

w = u × v⊥

有了這個新的向量w就相當於我們在平面內有了兩個座標軸,我們現在把v ′ ⊥ 投影到 w 和 v⊥ 上,將其分解為 v ′ v 和 v ′ w.

得到:

現在我們完成了旋轉的第二部。

4.  v 的旋轉

將上面的兩個結果組合就可以獲得:

因為叉乘遵守分配律

最後,將 v∥ = (u · v)u 與 v⊥ = v − (u · v)u 代入:

現在整個公式推導我們就已經完成了。

3D數學 學習筆記(三) 3D中繞任意軸的旋轉

本文 不要小看我們在unity或者3dmax中的乙個簡單的旋轉物體操作。題記 這裡需要用到的知識 向量運算 數量積,叉乘,加減 矩陣基本運算。讓我們匯出繞任意軸n旋轉角度 的矩陣。即 vr n.v 只要能用v,n,表示出v 即可,然後再求出基向量。方法如下 看圖 說明 1.向量n是單位向量 2.vi...

3D數學基礎筆記

最近裝置也到手了書也回來了在圖書館窩了幾天把前面五章看了做了點筆記 我是不會說是因為在家裡頹廢被嫌棄才跑出來學習的 xd 看了五章心有感慨想穿越回去把自己揍一頓為什麼不好好學線代為什麼?啊?看了下整本書的目錄大概分為三部分 線性代數的基礎應用比如各種變換如旋轉,反射等等。圖形學 高等變換的線性代數解...

3D數學基礎

vector是向量,向量的意思,向量既有大小,又有方向,verctor3 就是三維向量,乙個三維向量會有三個分量,分別是 x,y,z,在 unity 中每乙個遊戲物件都至少會有乙個元件叫 transform,transform 主要用來控制遊戲物件的位置,旋轉和縮放。vector3.distance...