四元數乘法計算

2021-10-09 08:37:18 字數 2325 閱讀 4805

關於兩個四元數的乘法,網上查了一大堆,沒乙個說明白的。

我就想知道給我兩個四元數,我該怎麼算出來它們的乘積。

這麼簡單的需求都沒法找到答案,實在對不起四元數的江湖地位。

要想計算四元數的乘法,首先需要知道四元數常見的表示方法

其中複數式、向量式和三角式基本是一回事,都是把四元數寫成乙個標量和乙個向量的和的形式。指數式和矩陣式就是一種表示方法,涉及到數學意義和運算還是主要用前三種。

補充說明:

這裡的i上面有箭頭,不是複數i,而是乙個普通的三維向量。

三角式具有明確的幾何意義,其中向量i是三維空間中的旋轉軸,2θ是旋轉角,具體見本文的「四元數的用途」。

因此四元數cosθ/2+i*sinθ/2就表示「繞向量i旋轉θ角」,這樣看起來幾何意義更明確。

所以用θ/2,並不是一定要除以2,只是除了之後有更好的幾何意義。

指數式類似於三角式(參考的複數的尤拉公式),本身只是一種表示方法,沒什麼具體的作用。

總結,四元數的任何表示方法都和複數沒有關係,不要把向量i和複數i弄混。

在向量式表達方式中,i1,i2,i3是三個正交的單位向量,也可以用i,j,k表示。

下面介紹不同四元數表示形式的乘法:

這個結果這麼複雜,而且看起來毫無規律,當然不能死記硬背。

其實就是簡單的展開相乘,注意涉及到i*j的時候按照叉乘右手定則判斷,即i*j=k;遇到i*i的時候按照複數運算,或者說按照點乘取負計算,即i*i=-1

當然也可以按照下面的乘數表進行運算×1

ijk1

1ijk

ii-1k

-jjj-k

-1ikk

j-i-1例如,(2+i)(i+j)=2*i+2*j+i*i+i*j=2i+2j-1+k=-1+2i+2j+k

從上面可以看出,四元數的乘法既不是叉乘,也不是點乘,是叉乘和點乘的混合,涉及到正交向量相乘如i*j時是叉乘,涉及到相同向量相乘如i*i時,卻是點乘取負,或者看作複數相乘。

因此四元數乘法和叉乘類似,沒有乘法交換律,如i×j=k,但是j×i=-k。

用複數式計算四元數乘法十分繁瑣,只適合手動計算較簡單的四元數乘法。

向量式四元數相當於把複數式四元數中的q1*i+q2*j+q3*k看成乙個整體的向量q,這樣乘法的表達形式會簡潔很多,如下:

其實就是展開相乘,注意q和p向量相乘的結果等於叉乘的結果減去點乘的結果。

為什麼還會多出一項q和p的點乘呢?其實在上文複數式乘法中已經介紹了,i*i不是按照叉乘等於0,而是按照點乘取負進行計算,即i*i=-1。所以向量式的四元數乘法中才會多出一項點乘。

向量式的四元數乘法也適用於三角式相乘。

為了方便計算機運算四元數乘法,我們把複數式乘法的結果寫成矩陣的形式,方便記憶和程式設計。但運算本質還是前兩種。『

上述兩種矩陣都是反對稱矩陣,保留的乘子分別是p和q,矩陣形式也略有不同。

還是要注意qp ≠ pq 

順便提一下,四元數的實際意義還是用來表示向量旋轉或者座標系轉換比較方便,這主要是利用四元數三角式的性質

或者

這就把向量旋轉的座標轉換變成了四元數相乘。在此之前,向量旋轉的座標變換都是用方向余弦矩陣配合尤拉角實現的。其在四旋翼中的應用可以參考我的另一篇博文:四旋翼與四元數學習筆記

可以看出,四元數的向量部分直接對應了旋轉軸,標量和向量部分共同決定了旋轉角,這是比尤拉角三個角表示旋轉更為接近本質的方法。

相較於尤拉角求旋轉向量座標的方法,

1、四元數方法不需要進行求三角函式的運算,因此運算精度更高;

2、四元數也不存在尤拉角的框架自鎖問題。

ps:框架自鎖問題如下

四元數乘法 旋轉之四 四元數

用 表示四元數是為了紀念其發明者 hamilton.其中 可以根據 來推導以下式子 跟複數類似,我們可以把四元數寫成 它的基是 或者 類似複數,四元數的模長 範數norm 定義為 也可寫成 同複數的乘法不同,四元數乘法不遵守交換律,所以有左乘和右乘的說法,結合律和分配律還是滿足的。類似的,我們也可以...

四元數乘法 剛體旋轉中的四元數

四元數博大精深,用途之一圖形學中的三維旋轉。單純從應用角度考慮,四元數可以以如下方式應用於旋轉。旋轉示意圖 假定我們有乙個經過原點的旋轉軸 其中 則,3d旋轉可以通過四元數乘法來表示 1 其中,為單位四元數,等價於 和 分別為 的共軛和逆。對於單位四元數而言 根據式 1 結合四元數的乘法,可以完成一...

四元數旋轉的計算

最近剛好又用到四元數,又深感生疏。複習一下記錄記錄。情形 對於三維向量p,繞著某軸v旋轉 角度 1.先考慮p垂直於v的情況 p所在的旋轉平面的另乙個軸為 v q,在這個旋轉平面內,使用二維情況下的旋轉公式就可以得到結果了 p cos p sin v q 2.v為任意方向的情況 把p分解為平行於v和垂...