Re: [請益] 四元數跟歐拉角 XYZ order 順序問題

作者: a27417332 (等號卡比)   2016-09-20 21:57:17
這是個只看標題跟稍微看下內文就開始亂說話的概念(?),以下可能有錯,
有錯的部分還麻煩大大們指教了。
大部分的人在程式碼寫旋轉的時候,都可能會用尤拉角去描述。
(這裡指譬如說模型輸入時y軸向上,所以想旋轉以符合engine的那種hard-coded)
以我自己的了解,常見的尤拉角的意思是:以固定的順序(像是xyz或是zyx),用三個角
度去描述一個物體如何在空間中旋轉。
換句話說,如果只存三個角度,而每次要旋轉時只改角度,那麼就會有萬向鎖的問題。
就算是用四元數,還是可以漂亮地做出萬向鎖:
假設有個狀況是想要繞x軸轉90度,在程式碼裡面寫上x+=90,然後每次旋轉都按照zxy或y
xz去重新組出矩陣或是四元數(不能跟前面結果相乘),大概或許應該彷彿似乎就可以發現
卡住惹。因為就算你用了矩陣或四元數,你就是用了尤拉角去表達了這次的旋轉。
但如果今天的轉法是,把第一次旋轉的三個角度記錄成不管是矩陣或是四元數,第二次
旋轉的三個角度也是換成矩陣或四元數以後,與第一個結果相乘以後,不管什麼角度都是
能夠轉到的。因為你已經不是只用三個角度變數去模擬這個旋轉,而是一次旋轉以後,
又一次旋轉。(但如果是角度累加就out了,因為最後還是三個角度決定這次旋轉)
所以不要再搞混了,尤拉角是一種旋轉的表達方法,四元數跟矩陣是拿來運算的工具。
而從四元數或矩陣往回推的時候,可以被轉成固定順序的尤拉角(畢竟你之後要拿這個資
料去旋轉。而就我所知,不管有沒有指定順序,貌似回推都不會有唯一的結果),或是一根
參考軸+角度(感覺除了沒轉可能有多重解以外,其他會有唯一解?)。
嗯,我已經不知道我在說啥了。
反正就是尤拉角這種表達方法是萬向鎖的根本,但如果尤拉角表達出來一個轉換以後,
又疊加上一個尤拉角表達出來的轉換,那麼就沒問題了。(繞口令)
而矩陣跟四元數有啥差別?據說是因為插值跟儲存空間的緣故。
我是覺得跟二維的複數平面的旋轉類似,就運算規則的問題而已...應該不是什麼神奇的
新世界。
P.S.
貌似有看到換軸的問題,旋轉是剛體變換,如果變換過程有鏡像,貌似不是旋轉就可以解
決的事情惹。要把某個軸換成某個軸的話,貌似直接自己手寫三階矩陣會比較快吧?有
code的話更好,直接把分量swap一下就好。
至於四元數能不能表達鏡像之類的...有請其他大大惹,我是覺得不行啦,感覺複數的運
算規則應該只是剛好符合旋轉而已,頂多再加上放大縮小之類的@@

Links booklink

Contact Us: admin [ a t ] ucptt.com