A Translation for Quaternion 一篇對四元數的翻譯


 

a. 這是一篇講解四元數原理的論文翻譯,原文參見 這里

b. 在此之前在網絡上找過很多資料,但基本都是結論性的介紹,並未對”為什么“進行深入全面的解釋。因此在看完本文並消化理解了以后,我決定將其翻譯出來,一方面作為知識總結,一方面為相似境遇的朋友提供幫助。

c. 但並不是說這篇翻譯就沒什么錯誤。尤其是在介紹四元數歷史的那節,由於缺少必要的數學涵養,我不自信是否翻得正確,還請各位朋友幫忙校准。另外由於英文水准有限,許多地方翻得比較生硬,望請諸位海涵。

d. 文中: ... ) 的部分,是我根據上下文自己進行的推理,不代表作者觀點(實際上作者在那些地方什么都沒有說,有時候你得自己推一推才能弄明白)。

e. 由於精力和時間關系,我沒有翻譯全文,只是節選了重要的章節。但相信已經覆蓋了必要的四元數的知識,足以支持你完成一個相機系統(Camera System)

f. 之所以說”足以“,是因為我已經用這些理論寫完了一個以四元數為支撐的相機。

g. 從開始有想法對它一探究竟,到一步步實現功能,再到總結性地翻譯本文,每晚見縫插針擠出約2小時,總共歷時近三個月完成。時間之久,身心俱疲。Snake is Old...

 

-------------------------------------------

 

 

四元數

Ken Shoemake
Department of Computer and Information Science
University of Pennsylvania
Philadelphia, PA 19104

 


概要

凡是圖形學所涉及到的數學知識,大多數都有詳盡完備的介紹,但四元數卻是一個例外。本文因此而寫。這篇教程介紹了諸如“什么是四元數”、“為何它如此有用”、“怎么用、用在哪里”,以及“使用時機”等話題。

 

 

介紹

在圖形學領域,四元數一般用來表達旋轉和朝向的概念。在1985年的SIGGRAPH會議上,四元數曲線(quaternion curve) 方法第一次被引入到圖形學中,意圖使旋轉動畫(rotation animation)計算變得更加方便。雖然這只是一個相當特殊的案例,但由於四元數出色的表現,令它無論與主流的矩陣表示法相比,還是與小眾的歐拉角(Euler angles)表示法相比,都不輸分毫。 

 

四元數由此聲名大噪,開始作為一種新技術被應用到曲線方法以及眾多領域中,如基於物理的建模技術,約束系統(constraint system)以及用戶界面(user interface)上。四元數之所以能被廣泛應用,是因為就實現而言,與其他同類技術相比,它不僅更加簡潔,成本更低,而且更加優雅。不過,研究者和開發者想要掌握它,必須要學習一些新的數學知識,但一般的數學課或者科學課程卻都不教授四元數。總之不管怎么說,無論是站在齊次坐標(homogeneous coordinates)的角度看,還是從一個更寬泛的角度看,四元數都不單單是我們所熟知的四維齊次坐標(four-component homogeneous coordinates)的復雜升級版本。

 

 

四元數定義

四元數有好幾種定義的方式,這些方式的形態也許有所不同,但實質卻彼此等價。了解這些形態是必要的,因為每一種形態對我們都非常有用。歷史上, Hamilton首次將四元數定義為形如廣義復數的形式: w+ix+jy+kz , 其中,i2 = j2 = k2 = -1, ij = k = -ji ,並且,i,j,k為虛數,而w,x,y,z為實數,(數學家為了紀念Hamilton,用H表示四元數)。四元數的運算中有一個非常特例:乘法的不可交換性。其余的運算性質則與實數的大同小異。Hamilton就曾意識到可以用這種“相似性”來抽象四元數的特性,具體說就是將四元數簡單地看作一個由四個實數組成的集合[x, y, z, w],並適當地為其定義加法和乘法。然而適逢當時復數的出現,Hamilton就將(x,y,z)“打包”成虛部(Imaginary part),並以術語“向量”(vector)稱之,而實數部分(Real part)他就稱為“標量”(scalar)。隨后的研究者們(主要是Gibbs)直接借用了Hamilton發明的這些術語,並從四元數那臟兮兮、但卻很常規的運算法則中提煉出一套更“干凈”的法則(extracted from the clean operations of quaternion arithmetic the somewhat messierÑbut more generalÑoperations of vector arithmetic):即現在的教學課程里都會教授的點積(dot products)與叉積(cross products)運算。對今天的我們而言,我們可以很容易逆觀歷史,用現代的點積、叉積等概念來描述當時的四元數。

基於以上觀點,我們現在來給出一些事實:首先我們一般會這樣定義四元數:[v, w], 其中v是一個向量且等於(x, y, z),  而w是一個實數。假設一個實數s, 如果用四元數形式描述的話,它就等於[0, s],而一個純向量v,如果用四元數描述的話,則是[v,0]。 接下來我們給出四元數的一些基本運算法則:

 

  

注意 N(q)是一個標量,所以q的倒數定義很清晰(so the description of q-1 is well-defined)。另外,乘法的不可交換性導致了一些運算需要換用更加清晰的形式來表達( Otherwise, the non-commutativity of multiplication requires explicit expressions),例如要用 pq-1 來代替  p/q。
 
上面列出的運算公式中,即有運算本身的定義,也有由定義推導得出的結論。試着將這些結論當作定理推導一番是很有用的,而且不難:每一個證明應該都可以直截了當地計算出來。

  

 

用四元數表示旋轉

四元數和三維空間內的旋轉關系可以用定理1進行闡述。

定理1:令p為三維(投影)空間內的一個點,用齊次坐標將其表示成四元數的形式即為: p = (x:y:z:w) = [(x, y, z), w] = [v, w] ; 令q為任一非零四元數。那么:

  • 結論1)  表達式 qpq-1的結果將使p=[v, w]變換到p`=[v`, w], 二者模長相等。
  • 結論2)  任何非零實數與q相乘,上式仍然成立。
  • 結論3)  如果上式中的q為N(q) = 1(即q為單位四元數),那么q = [ v sinΩ , cos Ω ] 表示一個旋轉動作:將p沿着單位軸v 旋轉2Ω即得到p'。 

 

證明:讓我們先從結論2入手。這個結論很容易證明。由於sq的倒數是q-1s-1, 且注意標量的乘法滿足交換律,所以我們可以得到:

(sq)·p·(sq)-1 = sq·p·q-1s-1 = qpq-1ss-1 = qpq-1 

 

根據這條結論,我們就可以把這個q直接當作一個單位四元數來看,正如 結論3里所需要的那樣,而又不失一般性。對於單位四元數q, 由於q-1 = q* ,所以我們可以將 qpq-1寫作 qpq*

 

現在來證明結論1就簡單多了。一般來說,對一個標量進行一些變換,其結果往往仍是一個標量;類似地,對一個向量[v, 0]進行一系列變換,其結果仍是一個向量。對於任何一個四元數q,其標量部分(即實部) S(q) 可以用公式2S(q) = q + q* 提取出來。於是我們可以得到這列等式:

2S(qpq*)= (qpq*) + (qpq*)* = qpq* + qp*q*

 

由於四元數的乘法遵循線性規律,我們可以將公因式提出,得到:

q(p+p*)q* = q(2S(p))q* = 2S(p)[注1]

 

又由於四元數乘法也作用於模長(Because multiplication preserves norms,),得到N(p) = N(p')[注2]; 同時因為w沒有改變,因此可得N(v) = N(v')。

(

注1:  由於2S(p)為標量,我們可以把它放到前面,得2S(p)qq*。又因為結論2已經告訴我們,在q[***]q*這種類型的式子中,q是不是單位四元數都是不影響結果的。因此我們可以將其視作一個單位四元數,這樣便有q* = q-1, 因此2S(p)qq* 2S(p)qq-1 = 2S(p) 。

注2:  所謂“Because multiplication preserves norms”,我想可以這樣理解:因為p' = qpq*而因為乘法保留模長,同時我們已把q看作為單位四元數(意味着N(q)=N(q*)=1),因此有N(p') = N(p)。 再注意到上面剛剛證明了2S(p') = 2S(p),即意味着w部相同。兩個四元數模長相等,其實部又相等,可以不難得到其虛部模長也相等,即N(v) = N(v')。


最后我們來證明結論3 —— 該定理最核心的部分。考慮下圖中的情形,圖中N(v0) = N(v1) = 1 。 我們定義一個四元數q = v1v0* = [v0 × v1, v0 · v1][注3] 。我們再定義Ω為v0到v1之間的角度, 所以v0·v1 = cosΩ 。我們再在兩向量的叉積方向上再設置一個單位向量 v = (v0 × v1) /v0 × v1‖, 該單位向量同時垂直於v0 和v1。現在我們可以將q 寫成 [ v sinΩ, cosΩ][注4] (我們應該假設v1 ≠ ±v0, 否則 q =+ 1, 如此這個旋轉動作是無效的)(We shall assume v1 ± v0, else q = ±1, and the action is the identity)。

 


(

注3:  這里解釋一下為什么 v1v0* = [v0 × v1, v0 · v1]。 根據前面列出的關於四元數的basic facts,我們知道而v0*= [v0, 0]= [-v0, 0] = -v0 。同時還知道vv' = [v×v', -v·v'] ,這里令v = v1, v' = v0*。 因此得到v1v0* = (-1)v1v0 =  (-1[v1 × v0, -v1 · v0] = [v0 × v1, v0 · v1] 。 

注4:  這里解釋一下為什么q可以寫成 [ v sinΩ, cosΩ]. 至此,我們已經知道q = v1v0*[v0 × v1, v0 · v1] 。 很明顯v0 · v1 =  cosΩ 。 而又有  v0 × v1 = v · v0 × v1‖。 v0 × v1‖是向量積v0 × v1的模長,根據向量積的求模共識,我們有 v0 × v1‖ = ‖v0‖v1sinΩ,  因為v0、v1皆為單位向量,所以v0 × v1‖ = sinΩ 。 因此 q = v sinΩ, cosΩ]  

)

現在我們引入v2, 令v2 = qv0q*。 

我們可以推導出,v2v1* = (qv0q*) v1* 擁有與v1v0*一樣的結構(內積與外積都相等);因此v2 = qv0q* 與v0v1都共同位於同一個平面內,且v2v1的夾角也為Ω。

 

下面是推導過程: 首先用q = v1v0* (qv0q*) v1* 中q*的替換,得到(qv0(v1v0*)*)v1*,進一步簡化得到q(v0v0)(v1*v1*)。因為v0v1是單位向量,所以它們的平方等於-1[注5],這樣就只剩下了q。

(

注5: 解釋下為什么 v0v0 = v1*v1* = -1 。假設v是單位向量,同時注意v叉乘自己的結果是0向量,所以vv = [v×v, -v·v] = [0, -1]。 

)

 

用等式可以描述為:

(qv0q*)v1*  =   (qv0(v1v0*)*)v1*
                    =   qv0(v0v1*)v1*
                    =   q(v0v0)(v1*v1*)
                    =    q(-1)(-1)
                    =   v1v0*


 

所以我們證明了v2v1* v1v0* 的確是相等的,也同時說明了上圖中的描述也是准確的。我們還可以進一步證明,假如那里有個v3 = qv1q*的話,由於q = v1v0* =》v1 = qv0,我們可以推導出 ,q作用於v1 后得到的v3,也仍然與v0,v1,v2在同一個平面上,且據v2的夾角也為Ω。因為:
 

v3v2*  =  (qv1q*) (qv0q*)* 
            =  (q(qv0)q*) (qv0q*)*
            =  q(qv0q*)(qv0q*)*
            =  q

 

聯系到我們的定理,我們可以得知,作用在v0以及v1上的四元數q,都是將其繞軸v 旋轉2Ω。事實上,這個四元數可以被應用到任意向量p中(而非僅僅v0或者v1),因為任意向量p都可以表示為s0v0+s1v1+s2v。四元數的線性性允許我們獨立地檢驗v0v1 以及v 。(注:意思是只要它們分別成立了,其線性結合的結果也同樣成立)。

 

當然,雖然我們已經證明了q作用於v0以及v1是成立的,但仍需證明對v也是成立的,這樣才能證明對任意p有效。現在我們來思考對v的證明。通過觀察我們得知,四元數的乘法之所以不滿足交換律,就是因為叉積不滿足交換律的原因。但在乘積qv = [v sinΩ, cosΩ][v,0]中,其叉乘的結果為0[注6],所以qv = vq,  進而有qvq* = vqq* = v, 這樣也就證明了q對v的作用也是有效的。

(

注6: 聯系到 注5我們不難理解為什么 v × v 的結果為0向量。 

)

因此,現在我們就可以理直氣壯地說,四元數q= [v sinΩ , cosΩ] 對任意一個向量的作用就是繞着軸v 旋轉2Ω了。這就是定理1中結論3的證明。

 

推論:任意一個在三維空間上的旋轉,都是一些單位四元數相作用的結果。

證明:利用定理1結論3,我們可以擴展到任意軸和任意角度,從而得到該推論成立。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM