可視化理解四元數,願你再也不掉頭髮

點擊「計算機視覺life」關注,置頂更快接收消息! 本文閱讀時間約8分鐘git

四元數的可視化

四元數被普遍應用在計算機圖形學領域,遊戲引擎Unity也是用四元數在後端計算旋轉。數學上,咱們能夠循序漸進地進行演算,但是直覺上一直不知道它究竟如何運做的。今天我就帶領你們經過觀察四元數,更準確地說是觀察四維單位超球面在三維的投影,來對它有個更深刻的瞭解。github

四元數的引出

四元數的一個最主要的應用就是表示旋轉,它既是緊湊的,也沒有奇異性。而旋轉的其餘表示方法各有優劣:後端

旋轉矩陣:用九個數來表示三個自由度,矩陣中的每一列表示旋轉後的單位向量方向,缺點是有冗餘性,不緊湊[1]。學習

旋轉向量:用一個旋轉軸和一個旋轉角來表示旋轉,可是由於週期性,任何2nπ的旋轉等價於沒有旋轉,具備奇異性[2,3]。spa

歐拉角:將旋轉分解爲三個分離的轉角,經常使用在飛行器上,但由於萬向鎖問題(Gimbal Lock) 而一樣具備奇異性。.net

萬象鎖問題,一三軸重合後損失一個自由度

四元數之因此難以理解,是由於它是一個四維的表示。不過也不是沒有辦法,由於咱們一般用單位四元數來表示旋轉,因此咱們只須要關注四維中的單位超球面(unit hypersphere),而後就能夠較爲輕鬆地得到它在三維的球極平面投影(stereographic projection).3d

單位圓在一維空間的投影

爲了更好地理解四維單位超球面在三維空間的投影, 咱們先來看一看二維單位圓是怎麼投影到一維空間的。視頻

在複數平面內,對於每個在單位圓上的點,畫一條線將 -1 點與這個點相連。連線將與虛數軸交於一點,此交點就是投影點。從上圖中能夠看到,1 投影在一維 0 處,i 和 -i 投影后不發生變化, 而 -1 投影到了正負無窮遠處。這裏須要注意的是,此處的投影僅僅只是二維空間中單位圓的一個投影,二維空間中的其餘點是沒有辦法用一維來表示的。token

咱們能夠在左邊的單位圓中清楚地觀察到乘以 i 對應着一個90度的旋轉,與之對應的,投影在一維座標軸上的點也在進行着移動,1 變成 i,i 變成 -1,-1 變成 -i,-i 變成 1, 這與複數的乘法定義相吻合。就這樣,二維空間中單位圓的純旋轉由一個維度表示清楚。遊戲

單位球面在二維空間的投影

如今想象咱們如何將三維空間的純旋轉解釋給二維的生物。首先咱們須要構建一個新的座標系,在這個座標系中,i 軸和 j 軸造成一個平面,而實數軸與z軸對齊。

4.png

須要注意的是,這裏的座標系僅僅只是爲了讓概念可視化,i 和 j 並不像複數和四元數那樣有良好的乘法定義。和以前的二維投影類似,咱們能夠用球極平面投影來描述三維的旋轉。對於每個單位球面上的點,咱們都把它與 -1 點相連,這條線與 ij 平面的交點便是二維的投影點。

如上圖所示,實數軸上的 1 會投影在平面的原點,北半球上的點會投影在 ij 平面的單位圓內,而南半球上的點會投影在單位圓以外,且任意方向的無窮遠處都會是-1的投影。這裏的單位圓是投影以後惟一不被扭曲的,位於單位球上的點。

爲了方便理解,咱們首先關注幾條參考線。通過 -1 且與 i軸 平行的圓投影在二維平面的 i 軸上,同理,與 j 軸平行的圓投影在 j 軸上。事實上,任意一個通過 -1 的圓投影到二維平面上都會是一條直線(通過 -1 等價於直線延伸到無窮遠處)。當球面在三維空間中旋轉時,延 i 軸或 j 軸的旋轉都會使垂直方向上投影的線變成圓形,投影的圓形變成線。延實數軸的旋轉投影在二維平面上仍然是一個二維的旋轉。

單位超球面在三維空間的投影

如同複數的定義,四元數由一個實數項和三個虛數項構成。對 q2 左乘一個四元數 q1,其做用是將 q2 拉伸 q1 的模長,再做用一個特殊的四維旋轉。由於咱們用單位四元數來表示三維空間中的旋轉,因此在這裏再也不考慮拉伸。

對四維空間中的單位球面進行球極平面投影,實數軸的 1 投影到 ijk 座標系的原點。如同一維中的 i, j 點,二維中的單位圓,當四維超球面投影到三維空間時,與三維空間交於一個位置不變的三維單位球面,而這個球面對應純四元數,也就是實數部分爲零。實數部分介於 0 到 1 之間的投影在了這個三維球面的裏面,而實數部分小於 0 的投影在了三維球面之外,-1 投影在了各個方向的無窮遠處。

正如同三維中的圓投影到二維平面中是一條線同樣,四維中的球(不是超球)投影在三維是一個平面,事實上,三維投影中的平面都是四維超球中過 -1 的球面在三維的投影。

畫一些參考線並觀察,咱們得出了整篇文章一個很是重要的結論:乘上一個單位四元數能夠當作是三維空間內兩個垂直且同步的二維旋轉。

單位四元數乘法的可視化

講了這麼多,咱們終於能夠用單位四元數在三維的投影來理解四元數啦!首先是四元數的乘法。什麼叫作兩個垂直且同步的二維旋轉呢?以下圖所示,正在變化的 i 軸描述了一個二維的旋轉,而 jk 平面裏的圓一樣描述了一個二維的旋轉。對於四維空間的生物來講,他們觀察到的是一個四維剛體的純旋轉,但在咱們看來,只能把它分解爲兩個二維的旋轉,它們因基座標的定義而互相垂直,因描述同一個四維旋轉而同步。

因而乎,咱們能夠觀察到幾乎全部的四元數乘法定則。左乘一個 i 至關於兩個圓都轉了90度,1 變成 i,i 變成 -1, j 變成 k, k 變成 -j, -j 變成 -k, -k 變成 j。

單位四元數表示三維旋轉的可視化

這裏簡單解釋一下爲何咱們用 qpq’ 的方法表示三維旋轉,其中 p 是表示三維空間向量的純四元數。首先,若是待旋轉的向量 p 與單位四元數虛部所表示的旋轉軸正交時,咱們只須要左乘單位四元數就能夠表示此旋轉。以下圖所示,i 點繞 k 軸進行旋轉,左乘單位四元數 q 便可。

但是對於大部分狀況,向量 p 和旋轉軸並不正交,單單只是左乘單位四元數 q 會在三維空間中有拉伸的效果。注意整個三維空間都是單位超球面的投影,這裏的拉伸只不過是投影以後的一種效果罷了。咱們用四元數並不關心四維單位超球面的旋轉,而是拿它來描述三維空間的旋轉,因而咱們必需要找到一種不帶拉伸效果的四元數運算。人們發現,當右乘 q 的逆時,同方向的旋轉會繼續進行,而拉伸的效果互相抵消,因而就有了 qpq' 的表示方法。若是表示一個繞 u 軸 θ 度角的旋轉, q 則表示爲 [cos(θ/2), sin(θ/2)u].

對於詳細的 qpq’ 的推導,請參考 krasjet 編寫的一篇文章 [4]。最後一幅圖用更多的點來描述這個道理,左乘單位四元數 q 會有拉伸效果,jk 圓逆時針旋轉,右乘 q 的逆抵消了拉伸的效果,jk 圓仍然繼續逆時針旋轉。

結語

到這裏,整個四元數的可視化就告一段落啦。在這篇文章中,咱們從二維旋轉在一維的投影,三維旋轉在二維的投影,逐漸進階到四維旋轉在三維的投影來了解四元數。咱們觀察了乘法法則在三維投影中的規律,並簡單解釋了四元數爲何要用 qpq‘ 的形式來表示三維旋轉。整片文章受 Youtuber 3B1B 的啓發,強烈推薦你們戳連接訪問這個能夠互動的教學視頻(https://eater.net/quaternions/)

參考資料

[1] 高翔,張濤,《視覺SLAM 十四講》 [2] J. Stuelpnagel, 「On the Parametrization of the Three-Dimensional Rotation Group,」 1964. [3] F. S. Grassia, 「Practical Parameterization of Rotations Using the Exponential Map,」 1998. [4] Krasjet, "四元數與三維旋轉". https://krasjet.github.io/quaternion/quaternion.pdf [5] https://www.youtube.com/watch?v=d4EgbgTm0Bg [6] https://www.youtube.com/watch?v=zjMuIxRvygQ [7] https://eater.net/quaternions/ [8] https://www.youtube.com/watch?v=zc8b2Jo7mno

推薦閱讀

從零開始一塊兒學習SLAM | 爲何要學SLAM? 從零開始一塊兒學習SLAM | 學習SLAM到底須要學什麼? 從零開始一塊兒學習SLAM | SLAM有什麼用? 從零開始一塊兒學習SLAM | C++新特性要不要學? 從零開始一塊兒學習SLAM | 爲何要用齊次座標? 從零開始一塊兒學習SLAM | 三維空間剛體的旋轉 從零開始一塊兒學習SLAM | 爲啥須要李羣與李代數? 從零開始一塊兒學習SLAM | 相機成像模型 從零開始一塊兒學習SLAM | 不推公式,如何真正理解對極約束? 從零開始一塊兒學習SLAM | 神奇的單應矩陣 從零開始一塊兒學習SLAM | 你好,點雲 從零開始一塊兒學習SLAM | 給點雲加個濾網 從零開始一塊兒學習SLAM | 點雲平滑法線估計 零基礎小白,如何入門計算機視覺? SLAM領域牛人、牛實驗室、牛研究成果梳理 我用MATLAB擼了一個2D LiDAR SLAM 可視化理解四元數,願你再也不掉頭髮https://mp.weixin.qq.com/s?__biz=MzIxOTczOTM4NA==&mid=2247485009&idx=2&sn=3709bcff8efb4a3d1ff78fbb60d4f245&chksm=97d7e3c6a0a06ad07bfcebd0e17a9d58c821ddfc2016dc4b8914bc0c921d65b59243ed5efcc9&scene=21#wechat_redirect)

"歡迎關注公衆號:計算機視覺life,一塊兒探索計算機視覺新世界~"

相關文章
相關標籤/搜索