万向节死锁的个人理解
萬向節死鎖的個人理解
- 前言
- 按序旋轉
- 從頭開始
- 舉個栗子
- 結論
前言
關于萬向節死鎖的問題個人看了一些博客,大多數文章的說法是由于按一個軸旋轉了特定角度,使另外兩個軸的方向重合,導致損失了一個自由度,并給出了陀螺儀的示意圖。但個人對于這種解釋很難理解。經過在unity中一番擺弄后,我覺得以下的說法可能更易接受。
先說明想法:我認為理解萬向節死鎖的兩個重點是“按序旋轉”和“從頭開始”。
按序旋轉
所謂按序旋轉就是說物體旋轉被拆分成按三個軸分別旋轉的結果,但這三個軸是有確定的先后順序的。在unity中手動調整transformer組件中的rotation值,我們會發現從(0,0,0)的狀態開始,只有按照y軸,x軸,z軸的順序進行調整,每一步才會按照物體自身xyz軸進行旋轉。說明起碼在這種方法下,物體的旋轉順序可以看做先y軸,x軸,最后z軸。這里說的軸應該理解成物體自身的軸,而非世界空間中的靜態軸。
從頭開始
所謂從頭開始就是在對unity中rotation項中x,y,z值進行調整時,不是根據調整前的狀態進行變化,而是從頭,也就是(0,0,0)的狀態開始(此時物體自身的軸與世界空間的靜態軸重合)按自身y軸、x軸,最后是z軸的順序變換成調整后的狀態。
比如rotation從(20,0,0)調整為(30,0,0)并不是我們習慣思維中直接按x再轉10,而是回到(0,0,0),先按自身y軸變換0,再按自身x軸變換30,最后按自身z軸變換0。這也符合前面說到的按序旋轉原則。
舉個栗子
y軸綠色,x軸紅色,z軸藍色
這是初始狀態
根據按序旋轉原則,y軸轉0度,x軸轉90度,z軸轉0度,調整至(90,0,0)
現在只調整z軸,根據從頭開始原則,會從(90,0,0)回到(0,0,0),再用按序旋轉原則y軸轉0度,x軸轉90度,z軸轉30度。視覺效果上好像是根據上圖直接旋轉z軸,是因為z軸本來就排在yx的后面。
此時只調整y軸,會發現看起來是按照當前z軸旋轉的,這就是萬向節死鎖現象。原因同上,根據從頭開始原則,會從(90,0,0)回到(0,0,0),再用按序旋轉原則y軸轉-30度,x軸轉90度,z軸轉0度。造成的視覺效果就是調整y軸和調整z軸好像都是按照(90,0,0)狀態時的z軸進行旋轉
結論
綜上所述,如果不能理解自由度損失的說法,不如這樣理解。萬向節死鎖是我們人類的慣性思維的產物,我們理所應當的認為旋轉是在以前的基礎上進行的,但計算機卻不會記錄中間狀態,每次只會從頭開始,并按照旋轉順序調整至當前設置的狀態。這就導致了特定情況下兩個不同的調整會產生相同的視覺效果。大家也可以用三根手指擺一組xyz正交基,按照yxz的旋轉順序和從頭開始原則模擬一下就能理解了。
總結
以上是生活随笔為你收集整理的万向节死锁的个人理解的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Arduino与Proteus仿真实例-
- 下一篇: 万向节锁--简单解释