四元數在旋轉變換和插值中的有趣的視覺化解釋

BenG__12發表於2024-05-04

四元數可以旋轉三維空間中的向量,而最近剛好硬著頭皮讀《複分析視覺化方法》(見[1]),這本書中,作者非常巧妙地運用球極射影的方法,將三維空間單位球面上繞向量軸旋轉的變換,對映為複平面上旋轉矩陣的表示,對四元數的插值給出視覺化的有趣並且直觀的解釋。

四元數的基本定義(參考2),兩個四元數相乘可以得到:

繞球面上一點p旋轉θ角度,可以表示成對任意兩條過p成角θ/2的兩條球面直線(大圓)的反射覆合。反射就是類似對球面大圓所在平面的對稱點的數學概念。兩個旋轉可以複合成一個旋轉變換,如圖:
              
L與M的夾角是θ/2,相交於點r, 點P1對L反射為P2,再對M反射成P3,兩次反射後P1變成P3就像繞點r旋轉了θ角度。再複合一個旋轉,使P3對M反射又成P2,然後對N反射成P4, 四次連續反射後P1變成P4旋轉ψ角度。

經過證明(詳細請參考[1]255頁,6.2.4小節空間旋轉也是默比烏斯變換)跳過其中的細節,球面上的旋轉可以用複平面上的矩陣來表示。用矩陣相乘來研究球面上旋轉變換複合的性質。球面上繞v旋轉表示下面的矩陣形式,v = li+mj+nk

在球面上分別繞 x ,y ,z 軸旋轉π, 例如當繞 x軸旋轉時 l = 1, m = 0, n = 0,ψ = π

容易驗證得出連續兩次繞 x ,y ,z 軸旋轉π,矩陣的乘積等於 -1,其中兩個矩陣的積等於另一個矩陣,所以繞向量v旋轉ψ的矩陣就可以拆解為下面的表示式:

到了這裡突然就有了一種似曾相識的感覺,上面表示式跟單位四元數的定義式等同。球面的上的旋轉複合現在可以用四元數的乘積來表示了,這一下好像開啟了一扇門,因為球面上所有的運動都可以用旋轉搞定,也就可以用四元數代數運算來表示了,反過來同理,單位四元數表示的4維向量,在球面上有具體的視覺化解釋,大腦於是開始炸裂了。接著,特里斯坦直接寫出四元素旋轉公式的非常直觀的證明,(描述下當時讀到這段的心情:經常看到用代數方法解決幾何問題,作者用幾何的方法證明代數公式,驚呆了! 這比[4]文中用向量運算證明四元數旋轉公式的方法直觀很多)
              
    簡單地考察球面上的點旋轉效果,假設球面上p'點是由p點繞a點角度ψ而成,想象一下在p'點時,繞a點相反方向角度-ψ就會回到原來的p點, 此時繞p點的旋轉任意角度θ,再繼以繞a點相正方向角度ψ,最後得到就是繞p'點旋轉角度θ。

要理解上式,可能剛開始心情比較平靜,感覺哪裡見過(比如矩陣相似形式),慢慢有一點不習慣,在這個等式中似乎任意兩個旋轉(對應的矩陣)都是相似的,因為球面上任意兩點p,p'都有一個點a,p繞a旋轉能到達p'。其次,旋轉空間中的向量,用四元數的代數運算代替了矩陣作用於向量的乘法,當 θ = π時就是通常說的四元數的向量旋轉公式。

現在介紹視覺化球面線性插值SLERP,在網上分享的很多的資料和參考中,對兩個四元數的插值的計算方法(參考6)都是在四元數點積的基礎之上(類似三維空間向量的點積運算),相對於兩點之間的線性插值,四元數之間的插值顯得很不直觀。但使用前面描述的四元數的可視方法,這種插值方法就變得很直觀明白了。SLERP公式有兩種(參考3):

q0,q1是需要進行插值的兩個四元數,q'是插值的中間狀態的值。第一個等式也是計算機中常用的插值公式,第二個等式相對來說要計算一次四元數的乘積(並不比矩陣運算量少),但這兩個等式下面可以看到其實是相同的。由於兩個單位四元數之積是另一個單位四元數,q0q'的積是q1,求得q'
                
t在[0,1]之中變化,使用q'的t次冪來對q0q1插值,得益於上面等式(1)的運用,簡直就是尤拉公式的翻版,又一次驚呆了,對於這一類的四元數(只有旋轉角度θ改變,u保持不變)它們的性質就如複平面的單位長度的虛數一樣了,在時刻t由等式(2),q'的旋轉角度變成tθ,使用前面對四元數介紹,這樣插值就有很直觀的視覺化解釋了:
                 
q'q0q1之間改變,它的旋轉角度在t1時刻是ψ1,在t2時刻變成ψ2,根據球面幾何中的計算方法,旋轉角度隨時間變化的增量ψ2-ψ1,即角速度變化並不是一個常數。在計算機的圖形應用中,如果一個物體繞q0旋轉過渡到繞q1旋轉,從微小到很難察覺的尺度看也許並不太絲滑。
                  
逆推兩個插值公式相等,只需要θ=ψ滿足就可以了。根據定義顯然cosθ等於q0q1的點積,也等於q0的逆與q1乘積的實部cosψ,所以θ與ψ是相等的。從球面來視覺化看,q0q1的夾角θ就是q0的逆與q1乘積的旋轉角ψ。

總結:藉助四元數在球面上的表示,透過作圖可以看到兩個四元數之間插值時的改變。由於有限的時間和精力,不能把其中一些結論的詳細推導過程寫下來。作圖完全靠手畫,編寫數學公式不熟練,用了差不多一週的時間,透過讀下面引用的參考材料,將四元數插值過程大概描述出來也許也不錯吧。

參考:

[1] [美]特里斯坦.尼達姆, 複分析:視覺化方法,齊民友譯.北京:人民郵電出版社
[2] Understanding Quaternions 中文翻譯
[3] David Eberly, Quaternion Algebra and Calculus
[4] 四元數與旋轉變換
[5] 四元數的球面線性插值(slerp)
[6] 四元數插值與均值(姿態平滑)

相關文章