尤拉角和旋轉矩陣的轉換

2021-07-07 06:40:59 字數 2916 閱讀 8995

尤拉角是一種常用的描述方位的方法。這項技術是著名數學家leonhard euler(1707~1783)的名字命名的,他證明了角位移序列等價於單個角位移。想詳細了解的維基百科:

1,什麼是尤拉角

尤拉角的基本思想是將角位移分解為繞三個互相垂直軸的三個旋轉組成的序列。這聽起來複雜,其實它是非常直觀的。之所以有「角位移」的說法正是因為尤拉角能用來描述任意旋轉,但最有意義的是使用笛卡爾座標系並按照一定順序所組成的旋轉序列。最常用的約定,即所謂「heading-pitch-bank」約定。在這個系統中,乙個方位被定義為乙個heading角,乙個pitch角,和乙個bank角。它的基本思想就是讓物體開始於「標準」方位——就是物體座標軸和慣性座標軸對齊。在標準方位上,讓物體作heading,pitch,bank旋轉,最後物體到達我們想要描述的方位。

在精確定義術語「heading」「pitch」「bank」前,先讓我們簡要回顧本書中使用的座標空間約定。我們使用左手座標系,+x向右,+y向上,+z向前。

heading為繞y軸的旋轉量,向右旋轉為正,旋轉正方向是順時針方向,經過heading旋轉之後,pitch為繞x軸的旋轉量,注意是物體座標系的x軸,不是原慣性座標系的x軸,依然遵守左手法則,向下旋轉為正。最後,經過了heading,pitch後,bank為繞z軸的旋轉量,依然是物體座標系的z軸。

當我們說到旋轉的順序是heading-pitch-bank時,是指從慣性座標系到物體座標系,如果從物體座標系到慣性座標系則相反。

2,關於尤拉角的其他約定

前面曾提到過,heading-pitch-bank系統不是惟一的尤拉角系統,繞任意三個互相垂直軸的任意旋轉序列都能定義乙個方位。所以,多種選擇導致了尤拉角約定的多樣性:

1)heading-pitch-bank系統有兩個名稱,當然,不同的名字並不代表不同的約定,這其實並不重要,一組常用的術語是roll-pitch-yaw,其中的roll對應與bank,yaw對應於heading,它定義了從物體座標系到慣性座標系的旋轉順序

2)任意三個軸都能作為旋轉軸,不一定必須是笛卡爾軸,但是用笛卡爾軸最有意義

3)也可以選用右手座標規則

4)旋轉可以以不同的順序進行

3,優點:1)容易使用;2)表達簡潔;3)任意三個角都是合法的

4,缺點:1)給定方位的表達方式不唯一;2)兩個角度間求插值非常困難

採用限制尤拉角的方法來避免以上問題的出現:heading限制在+-180,pitch為+-90。

以上為尤拉角的定義。旋轉的方法如下:

從尤拉角向量轉換很容易,困難的部分是轉換回來。xna提供了乙個方法可以建立旋轉矩陣,但它並沒有提供轉換回來的方法,因此我們將不得不自己實現。

首先,我們轉換為旋轉矩陣,matrix.createfromyawpitchroll()方法可以做到這一點。如果這裡使用尤拉角,我們需要以以下順序提供座標:

想象一下飛機,yaw指水平方向的機頭指向,它繞y軸旋轉。pitch指與水平方向的夾角,繞x軸旋轉。roll指飛機的翻滾,繞z軸旋轉。下面的**演示了這一過程:

[cpp]view plain

copy

"font-family:kaiti_gb2312;font-size:18px;"

>

// converts a rotation vector into a rotation matrix

matrix vector3tomatrix(vector3 rotation)  

這種方法可以提供乙個表示旋轉的矩陣。下面是最難的部分:將矩陣轉換為尤拉角。

下面是將旋轉矩陣轉換為尤拉角的**。

[cpp]view plain

copy

"font-family:kaiti_gb2312;font-size:18px;"

>

// returns euler angles that point from one point to another

vector3 angleto(vector3 from, vector3 location)  

// converts a quaternion to euler angles (x = yaw, y = pitch, z = roll)

vector3 quaterniontoeuleranglevector3(quaternion rotation)  

else

if(rotationaxes.x == -mathhelper.piover2)  

else

return

rotationaxes;  

}  // converts a rotation matrix to a quaternion, then into a vector3 containing

// euler angles (x: pitch, y: yaw, z: roll)

vector3 matrixtoeuleranglevector3(matrix rotation)  

同時,尤拉角的順序規定一共有12種,在轉化的時候一定要弄清楚規定是怎樣的。

尤拉角和旋轉矩陣相互轉換

尤拉角和旋轉矩陣可同樣表示剛體在三維空間的旋轉,下面分享這兩者互相轉換的方法和核心 功能 1.通過給定的尤拉角計算對應的旋轉矩陣 日期 2017 10 12 mat euleranglestorotationmatrix vec3f theta 功能 1.檢查是否是旋轉矩陣 日期 2017 10 1...

尤拉角和旋轉矩陣相互轉換

目錄 1.參考資料 2.變換矩陣 f h的svd分解或者旋轉矩陣 平移矩陣求解 3.尤拉角和旋轉矩陣可同樣表示剛體在三維空間的旋轉,下面分享這兩者互相轉換的方法和核心 尤拉角計算對應的旋轉矩陣 mat euleranglestorotationmatrix vec3f theta 功能 檢查是否是旋...

尤拉角的概念理解和尤拉角旋轉矩陣推導

尤拉角用來計算空間中剛體的旋轉位置,目的是改變剛體的朝向.具體來說,空間中有乙個點p和一根軸k,點p繞軸k旋轉 角度到p 求p 的座標.這就是尤拉角要解決的問題.只不過,尤拉角將1個點繞1根軸旋轉1個角 轉化為 1個點繞3個軸連續旋轉3個角 尤拉角的最終目的是為了改變剛體的朝向,剛體可以看做向量的集...