空間數學與剛體運動
單位四元數(用於旋轉)
單位四元數是一種把三維旋轉存成「僅僅四個數」的辦法,而這四個數合在一起表現得非常乖巧。你可以把它看作對軸角思想的一次精心重新打包:它悄悄編碼了「繞哪根軸轉、轉多遠」,卻把這份資訊攤到四個數值上,從而讓數學變得平滑而可靠。「單位」二字意味著這四個數經過縮放,使它們合起來的大小恰好為一——正是這個條件,讓該四元數描述的是一次純粹的旋轉,而不摻雜其他東西。
機器人和遊戲引擎之所以鍾愛四元數,是因為它繞開了那些更簡單方案的毛病。和歐拉角不同,四元數永遠不會發生萬向鎖,因此沒有任何朝向會讓控制系統卡死。和需要九個數的旋轉矩陣不同,四元數只需要四個數,儲存和傳遞都更省。而且它在數值上很穩定:當許多次轉動被合成之後,微小的捨入誤差只需把這四個數重新縮放回大小為一即可清除,而不會讓旋轉慢慢失真。
代價是四元數很難用肉眼讀懂,因為那四個數並不對應任何人能直接想像的東西;它還有個怪癖——一個旋轉和它的「雙重覆蓋」孿生體描述的是同一個物理姿態。所以工程師通常在底層用四元數來計算和混合朝向,只在需要讓人理解結果時,才換算成橫滾-俯仰-偏航或一根軸加一個角度。在兩個朝向之間平滑地過渡,這個操作叫球面線性插值(slerp),是動畫和機器人運動裡四元數的日常任務。
飛控用四元數上的球面線性內插,把無人機當前的朝向平滑地過渡到目標朝向,得到一次沒有突兀翻轉、也不會卡死的順滑轉動。
四元數讓兩個朝向之間的平滑、無故障過渡成為家常便飯。
只有大小恰好為一的四元數才代表旋轉;一旦四元數偏離了這個大小,就必須重新歸一化——正是這個低成本的維護小技巧,讓長長的旋轉鏈條始終保持乾淨。
又稱
另見