2009-09-23 19:07
1836人閱讀收藏
舉報用尤拉角可以很方便直觀的表示方位的變換,他的三個引數(head,pitch,roll),分別表示三個方向的變換,如head變就相當於搖頭,pitch就相當於點頭。roll相對與側頭
尤拉角優點:
1.容易使用,很直觀,容易理解
2.表示占用很少空間,只需要3個float,而matrix表示需要9個float
3.任何有效數字都是有效的(都能表示乙個有效的方向偏移),不像matrix 需要滿足一些條件
尤拉角缺點:
1.對乙個給定的方位,可以有多種不同的尤拉角表示方法。(詳見 3d math prime for graphic and game programing 156頁)
這會給程式設計帶來很大的不方便,最簡單的例如給某乙個方向上的偏移加上360度,還有乙個更麻煩的例如 pitching down 135° is the same as heading 180°,
pitching down 45°, and then banking 180°.
2. gimbal lock:我們把第二個引數(pitch)設為+- 90度的時候,將會導致第乙個和第三個引數在同乙個方向上偏移。
3.在兩個尤拉角之間插值很麻煩 (詳見3dmath.... 157頁)。
//對尤拉角,附件中提供了乙個很形象的描述,見"尤拉角1.jpg",「尤拉角1.bmp」中描述了如何根據尤拉角構造相應的矩陣
尤拉角的旋轉都是基於local space的,在自己推導公式的時候有一點需要注意的是,尤拉角表示的旋轉是針對「space」的,而對space的變換跟對point的變化恰好是乙個逆過程,由於我們需要的
是乙個對point的變換矩陣,所以可以在用公式推導時把角度取反,例如pitch (繞x軸旋轉)30度,就可以按照-30度來推導公式。
我的部落格中有乙個尤拉角的演示程式,以及irrlicht中尤拉角推導公式的演示
1. 通過實驗可以發現d3dxmatrixrotationyawpitchroll 是按照rotz * rotx * roty順序來實現的,這個跟d3d文件中描述的
roll pitch yaw 的處理順序正好相反,可以設定任意角度,然後在,之間切換,會發現結果總是一樣的。
2. irrlicht中的處理方式跟d3d不一樣,它不是乙個rollpitchyaw的尤拉角,而是簡單按照xyz的順序處理,分析公式或者比較
g_iwaytorotate =4的處理都可以發現,它的處理結果等於rotx * roty * rotz,可以設定任意角度,然後在,之間切換,
會發現結果總是一樣的。
irrlicht中對尤拉角的使用可以參考inline cmatrix4& cmatrix4::setrotationradians( const vector3d& rotation )函式
線性回歸及程式演示
from sklearn.linear model import linearregression 線性回歸的類 from sklearn.model selection import train test split 資料劃分的類 from sklearn.datasets import load...
3 隨機迷宮生成演示程式
假期寫了個基於隨機迷宮的遊戲,學習了相關隨機迷宮的生成演算法。其他演算法都好理解,也很容易寫出來。但就是隨機prim,怎麼都寫不對,生成的迷宮亂七八糟的,急死人了 沒辦法只好看別人的,但是又死活看不明白注釋,除錯又不太直觀,只好魔改程式,讓程式顯示構造迷宮過程中各個格仔的狀態。才弄懂明白,原來是隨機...
Linux下的socket演示程式
和c語言教程一樣,我們從乙個簡單的 hello world 程式切入 socket 程式設計。本節演示了 linux 下的 server.cpp 是伺服器端 client.cpp 是客戶端 要實現的功能是 客戶端從伺服器讀取乙個字串並列印出來。伺服器端 server.cpp include incl...