看板 GameDesign 關於我們 聯絡資訊
※ 引述《cjcat2266 (CJ Cat)》之銘言: : ※ 引述《yshihyu (yshihyu)》之銘言: : : 1. 為什麼一般順序是 ZYX? 還不是 XYZ : 順序沒有公共標準,一切就是看函式庫怎麼設計 : 通常就是看哪個順序最多人習慣使用 : 飛航術語的pitch-roll-yaw是很常見的定義方式 : 在一些工具的座標系對應的軸向順序就是ZYX : : 2. 這順序跟更換軸向存在什麼關係嘛? : : 例如 XYZ 變成 YXZ // 對換XY軸 : 更換軸向順序並不是單純的改變角度順序 : 要先算出旋轉矩陣,然後再用想要的軸向順序逆推角度 : 推導方式可以參考這連結下面的best answer : http://bit.ly/2cTVgKK : : 3. 四元數在做一些物體呈現如果換軸或是某個軸轉90度 : 不清楚你所謂的"換軸"是什麼意思? : 是說要物體沿著某個軸向選轉90度嗎? : 如果是那樣的話就把物體的四元數和代表該旋轉的四元數相乘 : 四元數代表的是一個軸和一個角度 : 令: 單位四原數的分量各為(x, y, z, w) : 旋轉軸單位向量為N = (Nx, Ny, Nz) : 旋轉角度為A : 則: x = Nx*sin(A/2) : y = Ny*sin(A/2) : z = Nz*sin(A/2) : w = cos(A/2) : 詳情可以參考我之前寫的這篇 : http://allenchou.net/2014/04/game-math-quaternion-basics/ _____________________________________________________________________ gyro and g-sensor 出來xyz raw data 經過 funsion algorithm 算出四元數 , 因為四元數不直觀所以我轉成尤拉角 那四元數跟尤拉角之間互相轉換過程發現有xyz順序問題 , 順序必須一致轉換才會正確 例如我下面完整程式碼 https://gist.github.com/anonymous/e33f55de45fb42fa7b7d20e4ccd0056a Euler e(-45, -45, -5); Euler2quaternion(e, q, zyx); // 尤拉轉四元數 order zyx quaternion2Euler(q, res, zyx); // 四元數轉尤拉必須也要是 order zyx 才會算出 -45, -45 , -5 值 1. 因為我看網路上資料大家只提到 euler angle 有 rotation order 問題 , 可是測試過程中發現 quaternion 好像也是存在 rotation order 問題, 像上面這樣程式 要相同 order 才能解出正確數值 , matlab quat2eul & eul2quat 兩個函數也有帶sequence 參數 所以是不是 quaternion 也有 rotation order 問題? 2. 上篇提到換軸是指經過 fusion algorithm 算出來四元數傳到 unity 後跟 unity 軸向不一致 例如我對 x 軸(pitch) 翻轉變成 y 軸 (roll) , 所以我想說能不能對四元數換XY軸, 讓 x pitch 跟 y roll 對換軸 , 所以就如前面所說不能直接換, 必需要轉成3x3 or 4x4 旋轉矩陣 後轉換在轉回四元數 or 尤拉角? 謝謝 -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 175.182.176.80 ※ 文章網址: https://www.ptt.cc/bbs/GameDesign/M.1474373572.A.E23.html