轉自: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,旋轉矩陣

3. 旋轉軸/旋轉角度
用旋轉軸的方向向量n和旋轉角度θ來表示一個旋轉,其中
θ>0表示逆時針旋轉。
3.1 旋轉軸/旋轉角度 轉化為 旋轉矩陣
設v是任意一個向量,定義
如下圖所示
這樣,我們建立了一個直角坐标系
。
設u為v繞軸旋轉後得到的向量,則有
R即為旋轉矩陣。進一步可表示為
4. 機關四元數(Unit quaternions)
四元數由Hamilton于1843年提出,實際上是在四維向量集合上定義了通常的向量加法和新的乘法運算,進而形成了一個環。
q稱為機關四元數,如果||q||=1。一個機關四元數可以表示三維旋轉。用機關四元數表示旋轉可以保持一個光滑移動的相機的軌迹,适合動畫生成。
4.1 旋轉軸/旋轉角度 轉化為 機關四元數
根據旋轉軸n和旋轉角度θ,得到機關四元數q
4.2 機關四元數 轉化為 旋轉軸/旋轉角度
4.3 機關四元數 轉化為 旋轉矩陣
4.4 四元數的性質
定義四元數的逆、乘法和除法,如下所示
根據該性質,我們可以對兩個旋轉變換q1和q2作線性插值,這相當于在四維空間中的超球面上對點q1和q2作球面線性插值。
也可以按下面的方法計算