土圭垚㙓數學課(三)四元數

何爲四元數?講解四元數的文章往往會把四元數跟複數聯繫在一起。誠然,四元數的起源跟複數有關係,但是理解複數系統並不是理解四元數的首要條件。

提到四元數,我們首先要提到一個人——萊昂哈德·歐拉(Leonhard Euler),根據歐拉旋轉定理wiki),在三維空間裏,假設一個剛體在做一個位移的時候,剛體內部至少有一點固定不動,則此位移等價於一個繞着包含那固定點的固定軸的旋轉。還有另外一種闡述:3D中的任意角位移都能表示爲繞單一軸的單一旋轉。如圖所示:

所謂角位移也就是旋轉,我們通常用歐拉角表示,這也是最容易理解的一種形式。

那麼軸-角形式跟四元數有什麼關係?它們並不等同,但是卻也密不可分。

上圖的四元數表示法:

q=[cos(θ/2) sin(θ/2)e]

注意這裏e是圖中的向量,即

q=[cos(θ/2) sin(θ/2)ex sin(θ/2)esin(θ/2)ez]


那麼接着我們就要討論四元數跟複數的關係了,首先先把William Hamilton這個四元數的發明者提出來,免得大家覺得沒意思跳過了這段。

首先,什麼是複數?

我們知道在實數範圍裏,對負數開方是沒有意義的。但是偏偏有人願意做“沒有意義”(注意這裏是引號)的事情,於是定義了虛數i,i的平方等於-1。

那麼當實數和虛數加在一起,便成爲了複數。

a+bi

其中a被稱爲實部,b被成爲虛部。

因爲有實部和虛部,所以我們可以認爲在複數集存在於一個2D平面(複數平面,又稱高斯平面)上,兩個軸分別爲實軸和虛軸,這樣x+yi就可以視作一個2D的點P爲(x,y)。


當P繞原點旋轉角度θ時


我們可以用另外一個複數來表示這個旋轉:

q=cosθ+isinθ

旋轉後的點

p1=pq=(x+yi)(cosθ+isinθ)=(xcosθ-ysinθ)+(xsinθ+ycosθ)i

因爲i的平方爲-1,所以複數爲我們提供了一個有趣的旋轉的表示法。(我們可以將這裏的q理解爲“2D平面上的四元數”,但其實他們之間還是有區別的)

然後我們的主角終於登場了,愛爾蘭數學家William Hamilton多年來一直致力於尋找一種方法將複數從2D擴展到3D。他認爲,這種新的複數應該有一個實部和兩個虛部。然而,Hamilton一直沒有辦法創造出一種有兩個虛部的有意義的複數。但故事並沒有結束,1843年,在赴皇家愛爾蘭學院演講的路上,他突然意識到應該有三個虛部而不是兩個。他把定義這種新複數類型性質的等式刻在Broome橋上。這樣,四元數就誕生了。(本段抄自《3D數學基礎:圖形與遊戲開發》)

四元數擴展了複數系統,它使用三個虛部i,j,k。它們的關係如下:

ii=jj=kk=-1

ij=k,ji=-k

jk=i,kj=-i

ki=j,ik=-j

一個四元數[w, x, y, z]定義了複數w+xi+yj+zk。

具體四元數的一些公式,我們有緣再講,只是有一個必須要提一下,這也是2D和3D上的區別。

定義三維上的點(x,y,z)在四元數空間上的座標p=[0,x,y,z],那麼如何讓這個點繞軸e旋轉θ?我們設繞軸e旋轉θ對應的四元數爲q,那麼旋轉後的點爲:

p1=qpq-1

其中q-1爲q的逆(等於q的共軛複數除以q的模,[w,x,y,z]的共軛爲[w,-x,-y,-z],模的定義與向量模類似,爲各項平方和的開方)。

(Unity3D裏我們可以直接用四元數Quaternion乘以向量Vector3,得到旋轉後的點)

最後提一句,四元數可以解決歐拉角的萬向鎖問題和別名問題(所以U3D裏使用Quaternion來保存旋轉)。

發佈了157 篇原創文章 · 獲贊 340 · 訪問量 59萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章