万向节锁--简单解释
以前一直以為自己已經清楚了這是怎么回事,也沒去細想,然而最近又遇到角度的問題,發現還是迷糊,于是又靜下心來看了網上的相關文檔,并以直白簡單的方式分享一下。
還是以unity為例吧
首先,萬向節鎖只發生于以模型自身坐標系旋轉的情況下,代碼就是 ? ?transform.localEulerAngles = xxx 這種,而?transform.eulerAngles = xxx這種是不會有問題的。
究其區別,就是旋轉時軸會不會跟著一起旋轉,會就有可能出現萬向節鎖。
原因如下:
由于坐標軸兩兩之間互相垂直,因此,三個軸中,任意一個軸c旋轉90或-90度,都會使剩下的兩軸中的a軸跑到b軸的位置上去,b軸跑到a軸相反的方向。并且,歐拉角的旋轉是分解為三個軸向上的旋轉并且有一個順序的(比如先X再Y再Z),三維軟件會一直按照某一順序去應用旋轉操作,因此,中間那一個軸轉了90或-90度時,第一個軸和第三個軸所應用的旋轉從世界坐標系上來看,是在同一個軸上,就是所謂的軸向丟失。
以unity坐標系為例,y向上,x向右,z向屏幕里面。假設應用順序為x->y->z,如果我想轉一個(10,90,20),那么我先在x上面轉10度,然后,y轉90度,此時,z軸指向了y旋轉前x的方向的反方向,所以,第三步,在z上轉20度,可以直接減在第一步里,在x上轉-10度,因此,可以認為此時在z軸向上應用任何旋轉是沒有意義的。
同樣,如果上面的y是轉了-90度,那么把z上的旋轉加到x上就可以達到同樣的效果。
我試了下,u3d的順序應該是z->x->y,大家可以試下(90,10,20)和(90,-10,0)的效果是一樣的。
順便一提,網上一個比較出名的視頻,外國人講萬向節鎖那個,剛開始看不理解啊,為什么三個環要有單向的嵌套關系呢?三個軸應該是一動全動啊?現在想來,這個是數值上的一個建模,不是物理上的。從數值上考慮,最先旋轉的軸是不受剩下兩個軸的旋轉影響的,但從現象上來看,三個軸是一起動的。只不過,有些軸的旋轉是發生在其它軸的旋轉之前的。
總結
以上是生活随笔為你收集整理的万向节锁--简单解释的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 万向节死锁的个人理解
- 下一篇: 【斜率优化】【决策单调】xjb讲课