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