關於如何建立繞任意軸旋轉的旋轉矩陣的程式設計與實踐
akinggw
前言
最近在看一本
3d理論方面的書,叫《
3d遊戲:…》跟
fly3d
有關。雖然看的不是太懂,但還是有那麼一點點感覺。關於如何建立繞任意軸旋轉的旋轉矩陣,這個問題,書上也講過,然後在網上也看了幾篇這樣的文章。我覺得這兩篇不錯,可以看一下。
向量幾何在遊戲程式設計中的使用
3d演講稿
file:///e:/documents%20and%20settings/administrator/local%20settings/temporary%20internet%20files/content.ie5/jjdbfhsw/281,26,goldman提出的方法
它們講的都是些理論的東西,沒有實際**。我在這裡就根據這些理論然後來闡述
fly3d
相關的**,很容易懂的。
任意軸旋轉
為什麼這裡要強調任意軸旋轉呢?因為基本的旋轉包括對x,
y,z三個軸的旋轉。而任意軸旋轉就是在任意乙個角度,任意乙個方向都可以旋轉。
對於單一軸的旋轉,我在這裡就不多說,是地球人都知道了,下面我就說說關於任意軸的旋轉。首先,我們闡述一下任意軸旋轉的基本理論,很多文章都是用書面的語言闡述的,但《
3d演講稿》中的圖形更能說明問題。我們下面看一下:
圖注1
圖注2這張圖顯示了如何構造第一張圖中提到的三個向量。如果看不懂也沒關係,最主要的是記住後面的那個公式。
圖注3這張圖數學地說明了我們的任意軸旋轉的實現過程。
圖注4任意軸旋轉的公式在這裡,我們只要用程式實現上面這個公式就可以了。
下面,我們來看一下
fly3d
中是如何實現的:
void flymatrix::set_rotation( float ang, const flyvector& dir2 )
這個函式的作用就是計算任意軸旋轉的矩陣,只要這個矩陣計算出來,就可以實現物體的任意軸旋轉。 ok
,就到這裡了吧。
三維座標點繞任意軸旋轉的新座標計算
任意軸可以用乙個起點乙個方向向量來表示。那麼繞任意軸旋轉就可以先將此軸移到通過原點,然後再旋轉,再將旋轉完的新座標做反向平移。則問題化為 計算繞通過原點的向量旋轉任意角度後的新點。假設單位向量為 rx,ry,rz 那麼旋轉矩陣如下 寫成函式如下 void rotate point3d float t...
繞任意軸旋轉的矩陣推導 (D3D 左手座標系)
首先假定任意旋轉軸穿過原點,如果不穿過,通過平移就可以搞定。記單位向量 n為旋轉軸 單位向量方便 旋轉角度使用 表示。首先假定旋轉矩陣為r n,v表示旋轉前的向量,v 表示v繞軸 n旋轉 角度後的向量,那麼我們知道有 vr n,v 下面就來考慮如果求r。思路 轉化,將問題轉化到 2d座標系下進行解決...
3D數學 學習筆記(三) 3D中繞任意軸的旋轉
本文 不要小看我們在unity或者3dmax中的乙個簡單的旋轉物體操作。題記 這裡需要用到的知識 向量運算 數量積,叉乘,加減 矩陣基本運算。讓我們匯出繞任意軸n旋轉角度 的矩陣。即 vr n.v 只要能用v,n,表示出v 即可,然後再求出基向量。方法如下 看圖 說明 1.向量n是單位向量 2.vi...