四元數左乘右乘 四元數 尤拉角學習筆記 個人理解

2021-10-16 16:34:26 字數 2665 閱讀 8256

一、背景知識:點乘、叉乘

複數的點乘:(ai+bj+ck)•(xi+yj+zk)=-(ax+by+cz)

複數的叉乘:(ai+bj+ck)×(xi+yj+zk)=(ax)i×i+(ay)i×j+(az)i×k+(bx)j×i+(by)j×j+(bz)j×k+(cx)k×i+(cy)k×j+(cz)k×k

ijk三軸定義如上圖所示。滿足右手螺旋定則:

(這個不是太明白,但是用的時候確實是這麼計算的)

二、二維複數表示旋轉

二維複數可以表示二維平面上的旋轉。

如:定義待旋轉的複數p=2+i,定義旋轉因子q=cos45+isin45

則如下圖所示

旋轉因子q左乘被旋轉複數p表示p逆時針轉45°。

三、為什麼三維旋轉用四維複數表示而不用三維複數

原貼見:

若用實軸x、ij兩個虛軸表示旋轉因子q和被旋轉複數p,那麼p繞某個軸轉動時,有: x軸繞j軸轉動:x×(a+bi) [j不出現] i軸繞x軸轉動:i×(a+bj) [x不出現]

此時會出現乙個問題,i×j這一項並不能表示實軸x,因為沒有規定。i×i=-1是可以的,但i×j不是實數。因此,由於ijx三軸雖然呈相互垂直關係,但無法用叉乘相互表示,不滿足計算的需求。因此引入四維複數(四元數),在三維複數的基礎上再引入乙個虛軸k,而將實軸x=0隱去,此時ijk三軸滿足叉乘相互表示(右手螺旋定則)。

因此,用四維複數替代三維複數只是因為實軸x無法通過ij叉乘表示,不滿足計算需要而已。將四維複數的實部置零,形式上是四維,當實際上用的時候是三維,實部是不需要的。

另乙個角度思考:(如被轉複數p=2只含有實部時,這個點既可以說是一維軸上的乙個點,也可以說是二維平面內的乙個點。低維的點、線、麵等都既可以存在於它自身的維度上,又可以存在於任意更高的維度內。)二維中,旋轉因子q=a+bi可以將原本在實軸上的一維的點轉進二維的平面裡。乘以幾維的複數就是在幾維空間中進行旋轉,比如乘以四維複數,那麼就是在四維空間中進行旋轉。但是旋轉並不一定會把實軸上的一維的p轉到二維平面上去,比如二維平面上有p=2,旋轉因子定義為q=3,那麼p、q都可以看做虛部為0的二維複數,此時旋轉p』=q×p=6,此時的旋轉只是在實軸上,並沒有把p轉進二維平面上。四元數表示的三維空間中的旋轉也是這個道理,p是乙個純四元數,實部為0,是實實在在的三維空間中的乙個向量,我們對p乘以另乙個四元數q時,實際上是在四維空間中進行的乙個旋轉,只不過如同二維平面上一樣,我們可以通過某種方式讓p的旋轉只保持在三維空間中,而不至於轉到四維空間中去。

另外,引自:

…所以從始至終,四元數定義的都是四維旋轉,而不是三維旋轉!……說白了,三維旋轉就是四維旋轉的乙個特例,就像二維旋轉是三維旋轉的乙個特例一樣。……qpq-1這種左乘單位四元數,右乘其共軛的表示式……這個運算形式是為了限制其運算結果所在的空間。簡單的說,當對乙個三維向量進行三維旋轉後,我們希望得到的是乙個三維向量。……那麼這個左乘單位四元數,右乘其共軛的運算保證了結果是乙個在三維超平面上中的純四元數。

四、四元數的書寫表示

設四元數表示為:[s,v],其中s為乙個實數,是四元數的實部。v是純虛數,v=xi+yj+zk。則四元數的叉乘計算為:q1×q2=[sa , va]×[sb , vb]=[sa•sb+va•vb , sa•vb+sb•va+va×vb]

定義:單位四元數:q=[s , v],|q|=1

純四元數:q=[0 , v],即實部為0,是乙個三維空間中的向量

五、四元數表示旋轉

原貼見:

二維空間中,旋轉因子q=cosθ+sinθi,由上一部分的四元數書寫表示,亦可將二維的旋轉因子表示為q=[ cosθ,sinθv],其中v為一維純虛數,v=i。三維空間中既然要用四維複數表示旋轉,那麼也可以定義旋轉因子為:q=[ cosθ,sinθv],其中v為三維純虛數,v=ai+bj+cz。(留乙個問題:二維平面上q能畫出來,三維空間中這個q呢?)

現有被旋轉三維複數寫成四維的純四元數形式:p=[0,p],旋轉因子q=[ cosθ,sinθv], 則p』=q×p=[ sinθv•p , cosθ•p+ sinθv×p]

①v和p正交時,繞v旋轉45°,則p』=[ 0 , cosθ•p+ sinθv×p]

舉例:p=[0,2i] q=[√2/2,√2/2 v],為了v和p正交,不妨設v=k,

則p』=[0, √2i+√2k×i]=[0, √2i+√2j],旋轉過程如下圖,繞k軸旋轉45°。

② v和p不正交時,繞v旋轉45°,則p』=[ sinθv•p , cosθ•p+ sinθv×p]

舉例:p=[0,2i]不變, q=[√2/2,√2/2 v],為了v和p不正交,不妨設v= √2/2 i+√2/2 k

此時計算p』=q×p=[-1, √2i+j]

可以看到,計算結果p』已經不再是純四元數了,實際上就是p被q轉進了四維空間,而在其純虛數ijk的三維空間內的投影如上圖所示,紅色的p並沒有繞玫紅色的v= √2/2 i+√2/2 k旋轉45°,而且|p』|≠2,被拉伸變形了。

此時hamilton提出了一種修正演算法,

這樣可以算的p』=[0,i+√2j+k],如下圖所示,

此時旋轉後的|p』|=2,沒有被拉伸,但是轉過了90°(p-v平面和p』-v平面夾角為90,即p-v平面繞著v逆時針轉了90°),角度上變為了兩倍,因此進一步修正,令

六、四元數→尤拉角

原貼見:

空間中的三維旋轉可視為繞三個基本軸的旋轉組合疊加,繞 x,y,z (分別代表i,j,k三個軸)三個基本軸旋轉角度分別為 ϕ,θ,ψ ,則三個基本旋轉的四元素可表徵為:

則已知四元數時,反求尤拉角:

四元數左乘右乘 四元數 旋轉

四元數系列 首先很感謝各位的支援,本來我也就是說寫個自己看的筆記啥的,沒想到那麼多人點贊。本篇主要介紹旋轉相關的知識,其中會盡量把我認為精彩的部分說細一點,更像教程的方式去敘述,但是基礎性的公式證明應該還是不會提,畢竟篇幅有限。0.胡爾韋茲定理 上篇四元數定義中,為了完整性,我提到了三元數或五元數理...

四元數左乘右乘 四元數的建立

在了解了上述知識後,我們就不需要那麼懼怕四元數了,實際上它和矩陣類似,不同的只是它的表示方式以及運算方式。那麼在unity裡如何利用四元數進行旋轉呢?unity裡提供了非常多的方式來建立乙個四元數。例如quaternion.angleaxis float angle,vector3 axis 它可以...

地形 點乘 叉乘 尤拉角 四元數

2018版本的unity terrain 地形 筆刷圖示 create neighbor terrains 新增加一塊地形 raise or lower terrain 提高或降低地形 paint texture 繪製紋理 set height smooth height stamp terrain...