https://www.cnblogs.com/delphi-xe5/p/12340038.html
https://www.cnblogs.com/delphi-xe5/p/12340039.html
https://www.cnblogs.com/delphi-xe5/p/12340053.html
https://www.cnblogs.com/psklf/p/5656938.html
參考上面 四個資料 。總結自己的理解
1. 歐拉角 分 靜態 和動態。 靜態就是 旋轉的時候坐標軸 不動 。 這個很簡單沒問題。 動態就是 旋轉的時候坐標軸會跟着動,一般說的都是這個 ,一下默認都是討論 的 坐標軸跟着 動的。
2.歐拉角 有 2 類表示方式。 第一類 zxz xyx 等等 同一個軸旋轉 2次。 第二類 xyz, yzx 等等 一個軸旋轉一次。 這兩類本質是一樣的,因為坐標軸本身就是垂直的, 第三次轉動使用第一次的軸沒問題。(畫一個圖,實際轉一下就明白,或者在3d軟件下模擬一下,或者看這個文章https://www.cnblogs.com/delphi-xe5/p/12340038.html 里的圖像演示)
默認情況下 3d軟件 使用的都是 xyz 類型的 歐拉角 。
3.歐拉角的缺陷:
歐拉角是在世界坐標系下, 按物體本地坐標系(即前面說的動態,跟着坐標軸動的)旋轉的三個角度。 注意 是有順序的 先x軸轉,再y軸轉,再z軸轉。 當然也可以用其他順序。總之必須是固定順序,
所以每一個不同的歐拉角,都是世界坐標系 按順序的三次旋轉得到的(也可理解為局部坐標系, 因為最開始局部坐標系和世界坐標系本身就重合的)。
在角度不動的時候,沒有任何缺陷,都是完美。
歐拉角的缺陷是加法問題。 當給角度加上一個值,看看會有什么變化,看看影響是否均衡,看看對最終實際結果有啥影響。
舉例子 當另外兩個角度不變,其中一個角度變化的時候: 如下:
-------------------------------------------------------------------------
a1: x軸0度。 y軸30度, z軸30度 是一個角度。
a2: x軸10度。 y軸30度, z軸30度 是一個角度。
a3: x軸20度。 y軸30度, z軸30度 是一個角度。
a4: x軸30度。 y軸30度, z軸30度 是一個角度。
a5: x軸40度。 y軸30度, z軸30度 是一個角度。
a6: x軸50度。 y軸30度, z軸30度 是一個角度。
a1-a6 物體的最終實際角度變化很大。(和后面的比較而言)
-----------------------------------------------------------
b1: x軸30度。 y軸0度, z軸30度 是一個角度。
b2: x軸30度。 y軸10度, z軸30度 是一個角度。
b3: x軸30度。 y軸20度, z軸30度 是一個角度。
b4: x軸30度。 y軸30度, z軸30度 是一個角度。
b5: x軸30度。 y軸40度, z軸30度 是一個角度。
b6: x軸30度。 y軸50度, z軸30度 是一個角度。
b1 到 b6 物體的最終實際角度變化中等。
-------------------------------------------------------
c1: x軸30度。 y軸30度, z軸0度 是一個角度。
c2: x軸30度。 y軸30度, z軸10度 是一個角度。
c3: x軸30度。 y軸30度, z軸20度 是一個角度。
c4: x軸30度。 y軸30度, z軸30度 是一個角度。
c5: x軸30度。 y軸30度, z軸40度 是一個角度。
c6: x軸30度。 y軸30度, z軸50度 是一個角度。
c1 到 c6 物體的最終實際角度變化很小。
-----------------------------------------------
總結: 首先:工a1-a6 相比較 b1-b6,c1-c6 來說,a1 -a 6 對最終實際結果影響比較大。
其次 a1 - a6 本身 a6的最終實際變化 大於 a1的最終實際變化。
總結: 就是變化很混亂,嚴重不均衡。
4 。兩個 歐拉角 中間值問題
兩個歐拉角的中間值 ,就是 x, y,z 的算數平均值 得到新的歐拉角 。 這沒問題。沒毛病。完全ok.
先x軸轉一個角, 再y軸轉一個角 , 再z軸轉一個角。 一點問題都沒有.
問題在於歐垃角的表達方式看似很合理, 在靜態下感覺很合理。
在動態下,也是對的,沒錯。 但是和人的感覺有沖突。 眼睛的感覺, 從一個角度 轉到另一個角度 是直接轉過去 , 而且是平滑 平穩的 轉過去的。
歐拉角經過三個步驟 也沒毛病,是合理的。 但是中間值 不均衡。 為什么不均衡 就是3 說的原因。 因為他本身就不均衡。
所以要使用四元數來解決中間值問題。這才是均衡的。 但是在靜態下 四元數不性感 ,還是歐拉角性感。 所以兩種方式分別使用。
5 萬向節 死鎖問題:
這個問題折磨了很久 終於搞通了。 其實這個問題本身不是問題。 是個人的思路,感覺 認識錯誤 造成的。 理性的理解的話 根本不存在萬向節。
注意:(澄清一點 本行之前的x,y,z角度應該用a,g,c來表示。不然容易和坐標軸重復。 因為本行之前不涉及命名重復問題,所以懶的改了。)
這要從 歐拉角 的 旋轉順序說起,a,b,c三個旋轉角。 xyz歐拉 方向 (按blender 設置來說 xyz歐拉方向 實際是先旋轉c 即繞z軸旋轉, 再繞b即y軸旋轉, 再繞c即x軸旋轉)。 先把已經條件理清除。 不然后面說得都等於0.
假設 m1 : a=10 , b=20 ,c=30 那么先繞局部坐標z轉30,在y20 再x10度 旋轉。 得到結果。
m2 : a=15 , b=25 ,c=35 那么先繞局部坐標z轉35,在y25 再x15度 旋轉。 得到結果。
這都沒問題, 因為都是從 原始坐標旋轉得到的。 清注意,所有的歐拉角 都是從原始世界坐標開始旋轉得到的。 即使是先旋轉了一次, 然后進行第二次旋轉。 那么也要先計算 a,b,c角度的分別和。 然后重新 從世界坐標按 z,y, 按順序旋轉出來。(為什么要如此,因為3的原因, 歐拉角本身不均衡,不具備可加性。只能按定義來)
萬向節產生的原因 就是當你旋轉了一次之后。 再旋轉第二次的時候,錯誤的把第一次旋轉當成了基准。 此時你無法解釋很多東西,你蒙蔽了,軸也有的轉有的不轉,這就是所謂的萬向節。 他大爺的,終於解釋清除了。
6; 萬向坐標軸 ,blender 里有一個萬向坐標系。
應該就是問題5 的延伸。 當以上一次旋轉做為基准的時候,該怎么弄呢? 聰明的陀螺儀出現了。 把陀螺儀做為萬向坐標, 就能很好的實現以上一個旋轉結果 做為基准 ,進行下面的旋轉的要求。
因為陀螺儀 能 把每一次的旋轉 都進行線性累加, 陀螺儀 真牛逼。 直接在陀螺儀上旋轉 。 可以放棄歐拉角了。 牛逼啊。 陀螺儀的旋轉軸, z會影響y,z 。 y會影響x. 所以陀螺儀的y,x坐標會亂跑。但是z坐標穩定。
完結。
7. 萬向節死鎖, 用陀螺儀當然也能解釋萬向節死鎖顯現。 但這是另外一個系統。 和歐拉角無關 。
也就是說 旋轉有兩套系統 ,一套是歐拉角 系統。 一套是陀螺儀坐標系統(但是坐標會亂跑,甚至不垂直,甚至重合(就是萬向節));
3d軟件正好使用了 2種方式。