發表於: 2011-08-06 13:47:39
網上討論四元素法表示轉動的文章不少,但似乎總不能講清楚。例如在csdn上有
其中談到:
四元數一般定義如下:
q=w+xi+yj+zk
其中w是實數,x,y,z是虛數,其中:
i*i=-1
j*j=-1
k*k=-1
也可以表示為:
q=[w,v]
其中v=(x,y,z)是向量,w是標量,雖然v是向量,但不能簡單的理解為3d空間的向量,它是4維空間中的的向量,也是非常不容易想像的。
四元數也是可以歸一化的,並且只有單位化的四元數才用來描述旋轉(面向),四元數的單位化與vector類似,
首先||q|| = norm(q)=sqrt(w2 + x2 + y2 + z2)
因為w2 + x2 + y2 + z2=1
所以normlize(q)=q/norm(q)=q / sqrt(w2 + x2 + y2 + z2)
說了這麼多,那麼四元數與旋轉到底有什麼關係?我以前一直認為軸、角的描述就是四元數,如果是那樣其與旋轉的關係也不言而喻,但並不是這麼簡單,軸、角描述到四元數的轉化:
w = cos(theta/2)
x = ax * sin(theta/2)
y = ay * sin(theta/2)
z = az * sin(theta/2)
其中(ax,ay,az)表示軸的向量,theta表示繞此軸的旋轉角度,為什麼是這樣?和軸、角描述到底有什麼不同?這是因為軸角描述的「四元組」並不是乙個空間下的東西,首先(ax,ay,az)是乙個3維座標下的向量,而theta則是級座標下的角度,簡單的將他們組合到一起並不能保證他們插值結果的穩定性,因為他們無法歸一化,所以不能保證最終插值後得到的向量長度(經過旋轉變換後兩點之間的距離)相等,而四元數在是在乙個統一的4維空間中,方便歸一化來插值,又能方便的得到軸、角這樣用於3d影象的資訊資料,所以用四元數再合適不過了。
我看不懂後面一段的意思,也不知道為什麼不用theta全形,而用theta/2?
分享到:
儲存過程的一般定義
一般儲存過程定義包括如下幾部分 1.儲存過程名稱 create procedure procedure name 或者 create procprocedure name 2.引數,輸入引數,輸出引數 parameter name1int,輸入引數定義,包括名稱,型別及長度 parameter na...
MFC 自定義訊息的一般過程
1 在相關類的標頭檔案頂部新增如下所示的字串 以cmydlg類為例 在cmydlg.h中新增 define wm my message wm user 100 注意 在原始檔 cpp 也可以的。1 2 其中1位置處的訊息名可以自定,位置2處是確保訊息在程式中唯一性,所以用 wm user 數值 的形...
為什麼一般hashtable的桶數會取乙個素數
為什麼一般hashtable的桶數會取乙個素數 設有乙個雜湊函式 h c c n 當n取乙個合數時,最簡單的例子是取2 n,比如說取2 3 8,這時候 h 11100 二進位制 h 28 4 h 10100 二進位制 h 20 4 這時候c的二進位制第4位 從右向左數 就 失效 了,也就是說,無論第...