四元數一般定義如

2021-06-17 00:42:56 字數 1028 閱讀 8760

發表於: 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位 從右向左數 就 失效 了,也就是說,無論第...