第一次繞 x轉***角度
第二次繞y轉***xx角度**完後的z軸可能已經和第一次旋轉的x軸重合)
第三次繞z轉******角度(重合了 再繞z轉其實相當於第一步的操作 也就是說著步的操作其實是無用的)
圖1:物體的初始朝向
現在開始旋轉物體,先繞物體座標系x軸(xl)旋轉30度(這裡我規定沿著軸向軸的負方向看去,順時針旋轉為正。你也可以自己規定,無所謂,遵守規定即可),注意,此時的物體座標系已經發生變化,見圖2,
圖2:物體繞物體座標系x軸(xl)旋轉30度
然後再繞yl軸旋轉90度,此時,你會發現zl軸已經和了世界座標系x軸共軸。見圖3。
圖3:物體繞物體座標系y軸(yl)旋轉90度
好了,此時使用尤拉角來表示當前物體的方向的話,其座標應該是(30,90,0),對應旋轉順序是 xl->yl->zl。然而,有意思的是如果再繼續旋轉,現在按照zl旋轉-40度,發現什麼了?咦,怎麼感覺已經繞過這個軸旋轉過一次了, 雖然軸向相反?^_^,anyway,最後的座標應該是(30,90,-40),見圖4。
圖4:物體繞物體座標系z軸(zl)旋轉-40度
好了,回到剛才的疑惑上,既然感覺兩次旋轉是繞同一軸,如果我一開始考慮全部繞該軸的旋轉呢?即先繞 xl旋轉30-(-40)=70度,然後再繞yl旋轉90度。^_^怎麼樣,已經到達和上次旋轉的效果了吧。這說明什麼?尤拉角座標 (30,90,-40)和(30-(-40),90,0)等同。甚至座標(rx1,90,rz1)和(rx2,90,rz2)相同,只需滿足rx1- rz1=rx2-rz2。當rx1-rz1=rx2時,rz2==0,即在這種情況下任何再繞zl軸的旋轉,都可以使用先繞xl軸來做到。或者從另乙個角 度來說,物體現在本質上只能繞兩個軸的旋轉!即少了乙個旋**由度!這就是三維中的萬向節死鎖現象。
概括起來可以這麼說,繞著物體座標系中某乙個軸,比如y軸的+(-)90度的某次旋轉,使得這次旋轉的 前一次繞物體座標系x軸的旋轉和這次旋轉的後一次繞物體座標系z軸的旋轉的兩個旋轉軸是一樣(一樣的意思是指在世界座標系中,兩次旋轉軸是共軸的但方向相 反),從而造成乙個旋**由度丟失。
實際上,使用3個量來表示三維空間的朝向的系統都會遭遇這個問題,除非用4個量來表示,如四元數。
2維的情況下尤拉角系統的萬向節死鎖導致瞭望遠鏡不能跟蹤飛行器的位置,用某人的話就是在某種座標系統下,空間中連續的的位置,不能用連續的座標值來表示。看看三維情況下是不是也是這樣?是不是不能跟蹤飛行器的朝向?
舉例:飛行器開始的方向是如圖1所示,對應尤拉角座標(0,0,0)。現在飛行器按照繞xl 30度,然後繞yl 40度,最後繞zl 50度的順序旋轉,對應地,尤拉角座標來跟蹤的話是(30,40,50)。最後飛行器的朝向是如圖5所示。
圖5:座標(30,40,50)對應的朝向
現在,飛行器又開始繞xl軸轉個1度。那麼現在,尤拉座標相應地變成(31,40,50)來跟蹤,這個座標對應的飛行器的朝向對嗎?實際上是對的,沒有問題,一切ok。
換個情況,飛行器從圖1初始位置按照繞xl 30度,然後繞yl 90度,最後繞zl -40度的順序旋轉,對應地,尤拉角座標來跟蹤的話是(30,90,-40),最後飛行器的朝向是如圖4所示。現在,飛行器又開始繞xl軸轉個1度。那麼 現在,尤拉座標相應地變成(31,90,-40)來跟蹤,對嗎?比劃看看,使用這個座標,飛行器肯定對不上了!萬向節死鎖還是那麼討厭。
這也是為什麼三維的情況下,尤拉角插值不適合用來表示旋轉插值(等角速度)的原因。使用四元數插值吧
萬向節死鎖 萬向節死鎖 gimbal lock
如下圖一,把灰色箭頭想象成是一架飛機,紅,綠藍三個圈看作是三個外圍控制器,外圈帶動所有裡圈運動,裡圈的運動不影響外圈。1,首先,繞y軸旋轉 旋轉綠圈 來確定前進的方向。這時紅圈與藍圈都跟著旋轉。2,然後,繞x軸旋轉 旋轉紅圈 讓飛機仰視或俯視。這時藍圈跟著一起旋轉,綠圈不動。3,最後,繞z軸旋轉 旋...
萬向節死鎖 Gimbal Lock
萬向節死鎖 gimbal lock 在學習計算機動畫課程的時候,書中提到固定角和尤拉角朝向表示法有一定的侷限性,它們無法避免gimbal lock現象。在網路上蒐集了很多有關gimbal lock有用的資料,對我很有幫助,在這裡列出乙個索引,以方便其他有需要的朋友檢視 1.維基百科 首先有必要理解一...
萬向節死鎖 Gimbal Lock
轉 以前發過一篇文章 是關於萬向節死鎖 gimbal lock 的,裡面翻譯了2 維座標系中的萬向節死鎖問題的闡述。後來,參考了各位bloger的觀點以及一些資料,整理了一下3維下的gimbal lock問題,算是加深一下理解吧,如下 在3維中常用的尤拉角座標定向系統是用繞三個軸旋轉的角度來表示物體...