天天看點

三維旋轉矩陣(包括任意軸的通用旋轉矩陣、Euler角、機關四元數)的計算

轉自:https://blog.csdn.net/deng_sai/article/details/21169997

轉自:http://hi.baidu.com/herohbc/item/4d20780de7726697a2df437f

三維旋轉矩陣的計算

在三維空間中,旋轉變換是最基本的變換類型之一,有多種描述方式,如Euler角、旋轉矩陣、旋轉軸/旋轉角度、四元數等。本文将介紹各種描述方式以及它們之間的轉換。

1. 旋轉矩陣

用一個3階正交矩陣來表示旋轉變換,是一種最常用的表示方法。容易證明,3階正交陣的自由度為3。注意,它的行列式必須等于1,當等于-1的時候相當于還做了一個鏡像變換。

2. Euler角

根據Euler定理,在三維空間中,任意一種旋轉變換都可以歸結為若幹個沿着坐标軸旋轉的組合,組合的個數不超過三個并且兩個相鄰的旋轉必須沿着不同的坐标軸。是以,可以用三個沿着坐标軸旋轉的角度來表示一個變換,稱為Euler角。旋轉變換是不可交換的,根據旋轉順序的不同,有12種表示方式,分别為:XYZ、XZY、XYX、XZX、YXZ、YZX、YXY、YZY、ZXY、ZYX、ZXZ、ZYZ,可以自由選擇其中的一種。對于同一個變換,旋轉順序不同,Euler角也不同,在指定Euler角時應當首先約定旋轉順序。

2.1 Euler角 轉化為 旋轉矩陣

不妨設先繞Z軸旋轉γ,再繞Y軸旋轉β,最後繞X軸旋轉α,即旋轉順序為XYZ,旋轉矩陣

三維旋轉矩陣(包括任意軸的通用旋轉矩陣、Euler角、機關四元數)的計算

3. 旋轉軸/旋轉角度

用旋轉軸的方向向量n和旋轉角度θ來表示一個旋轉,其中

三維旋轉矩陣(包括任意軸的通用旋轉矩陣、Euler角、機關四元數)的計算

θ>0表示逆時針旋轉。

3.1 旋轉軸/旋轉角度 轉化為 旋轉矩陣

設v是任意一個向量,定義

三維旋轉矩陣(包括任意軸的通用旋轉矩陣、Euler角、機關四元數)的計算

如下圖所示

三維旋轉矩陣(包括任意軸的通用旋轉矩陣、Euler角、機關四元數)的計算

這樣,我們建立了一個直角坐标系

三維旋轉矩陣(包括任意軸的通用旋轉矩陣、Euler角、機關四元數)的計算

設u為v繞軸旋轉後得到的向量,則有

三維旋轉矩陣(包括任意軸的通用旋轉矩陣、Euler角、機關四元數)的計算

R即為旋轉矩陣。進一步可表示為

三維旋轉矩陣(包括任意軸的通用旋轉矩陣、Euler角、機關四元數)的計算

4. 機關四元數(Unit quaternions)

四元數由Hamilton于1843年提出,實際上是在四維向量集合上定義了通常的向量加法和新的乘法運算,進而形成了一個環。

三維旋轉矩陣(包括任意軸的通用旋轉矩陣、Euler角、機關四元數)的計算

q稱為機關四元數,如果||q||=1。一個機關四元數可以表示三維旋轉。用機關四元數表示旋轉可以保持一個光滑移動的相機的軌迹,适合動畫生成。

4.1 旋轉軸/旋轉角度 轉化為 機關四元數

根據旋轉軸n和旋轉角度θ,得到機關四元數q

三維旋轉矩陣(包括任意軸的通用旋轉矩陣、Euler角、機關四元數)的計算

4.2 機關四元數 轉化為 旋轉軸/旋轉角度

三維旋轉矩陣(包括任意軸的通用旋轉矩陣、Euler角、機關四元數)的計算

4.3 機關四元數 轉化為 旋轉矩陣

三維旋轉矩陣(包括任意軸的通用旋轉矩陣、Euler角、機關四元數)的計算

 4.4 四元數的性質

定義四元數的逆、乘法和除法,如下所示

三維旋轉矩陣(包括任意軸的通用旋轉矩陣、Euler角、機關四元數)的計算

根據該性質,我們可以對兩個旋轉變換q1和q2作線性插值,這相當于在四維空間中的超球面上對點q1和q2作球面線性插值。

三維旋轉矩陣(包括任意軸的通用旋轉矩陣、Euler角、機關四元數)的計算

也可以按下面的方法計算

三維旋轉矩陣(包括任意軸的通用旋轉矩陣、Euler角、機關四元數)的計算