關于兩個四元數的乘法,網上查了一大堆,沒一個說明白的,
我就想知道給我兩個四元數,我該怎么算出來它們的乘積,
這么簡單的需求都沒法找到答案,實在對不起四元數的江湖地位,
要想計算四元數的乘法,首先需要知道四元數常見的表示方法:

其中復數式、矢量式和三角式基本是一回事,都是把四元數寫成一個標量和一個向量的和的形式,指數式和矩陣式就是一種表示方法,涉及到數學意義和運算還是主要用前三種,
下面介紹不同四元數表示形式的乘法:
1.復數式

這個結果這么復雜,而且看起來毫無規律,當然不能死記硬背,
其實就是簡單的展開相乘,注意涉及到i*j的時候按照叉乘右手定則判斷,即i*j=k;遇到i*i的時候按照復數運算,或者說按照點乘取負計算,即i*i=-1
當然也可以按照下面的乘數表進行運算
| × | 1 | i | j | k |
|---|---|---|---|---|
| 1 | 1 | i | j | k |
| i | i | -1 | k | -j |
| j | j | -k | -1 | i |
| k | k | 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,
用復數式計算四元數乘法十分繁瑣,只適合手動計算較簡單的四元數乘法,
2.矢量式
矢量式四元數相當于把復數式四元數中的q1*i+q2*j+q3*k看成一個整體的矢量q,這樣乘法的表達形式會簡潔很多,如下:

其實就是展開相乘,注意q和p矢量相乘的結果等于叉乘的結果減去點乘的結果,
為什么還會多出一項q和p的點乘呢?其實在上文復數式乘法中已經介紹了,i*i不是按照叉乘等于0,而是按照點乘取負進行計算,即i*i=-1,所以矢量式的四元數乘法中才會多出一項點乘,
矢量式的四元數乘法也適用于三角式相乘,
3.矩陣式
為了方便計算機運算四元數乘法,我們把復數式乘法的結果寫成矩陣的形式,方便記憶和編程,但運算本質還是前兩種,‘

上述兩種矩陣都是反對稱矩陣,保留的乘子分別是p和q,矩陣形式也略有不同,
還是要注意QP ≠ PQ
四元數的用途
順便提一下,四元數的實際意義還是用來表示向量旋轉或者坐標系轉換比較方便,這主要是利用四元數三角式的性質

或者

這就把向量旋轉的坐標轉換變成了四元數相乘,在此之前,向量旋轉的坐標變換都是用方向余弦矩陣配合歐拉角實作的,
四元數的優勢
可以看出,四元數的矢量部分直接對應了旋轉軸,標量和矢量部分共同決定了旋轉角,這是比歐拉角三個角表示旋轉更為接近本質的方法,
相較于歐拉角求旋轉向量坐標的方法,
1、四元數方法不需要進行求三角函式的運算,因此運算精度更高;
2、四元數也不存在歐拉角的框架自鎖問題,
ps:框架自鎖問題如下

轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/20175.html
標籤:其他
上一篇:如何定位myisamchk的報錯
下一篇:微型處理器
