我已經卡住了我的旋轉矩陣的歐拉角。來自YZX旋轉矩陣的歐拉角問題
我的約定是:
- 左手(X右,z後,Y向上)
- YZX
- 左手角旋轉
我的旋轉矩陣建立起來的來自歐拉角(來自我的代碼):
var xRotationMatrix = $M([
[1, 0, 0, 0],
[0, cx, -sx, 0],
[0, sx, cx, 0],
[0, 0, 0, 1]
]);
var yRotationMatrix = $M([
[ cy, 0, sy, 0],
[ 0, 1, 0, 0],
[-sy, 0, cy, 0],
[ 0, 0, 0, 1]
]);
var zRotationMatrix = $M([
[cz, -sz, 0, 0],
[sz, cz, 0, 0],
[ 0, 0, 1, 0],
[ 0, 0, 0, 1]
]);
在最後旋轉矩陣結果:
R(YZX) = | cy.cz, -cy.sz.cx + sy.sx, cy.sz.sx + sy.cx, 0|
| sz, cz.cx, -cz.sx, 0|
|-sy.cz, sy.sz.cx + cy.sx, -sy.sz.sx + cy.cx, 0|
| 0, 0, 0, 1|
我使用這個代碼計算我的歐拉角回從這個矩陣:
this.anglesFromMatrix = function(m) {
var y = 0, x = 0, z = 0;
if (m.e(2, 1) > 0.999) {
y = Math.atan2(m.e(1, 3), m.e(3, 3));
z = Math.PI/2;
x = 0;
} else if (m.e(2, 1) < -0.999) {
y = Math.atan2(m.e(1, 3), m.e(3, 3));
z = -Math.PI/2;
x = 0;
} else {
y = Math.atan2(-m.e(3, 1), -m.e(1, 1));
x = Math.atan2(-m.e(2, 3), m.e(2, 2));
z = Math.asin(m.e(2, 1));
}
return {theta: this.deg(x), phi: this.deg(y), psi: this.deg(z)};
};
我向後做了數學和轉發數次,但我看不出有什麼問題。任何幫助將非常感激。
請問你的問題http://math.stackexchange.com/ –
我會,但有更多的材料在3D旋轉上的計算器。 math.stackexchange聲稱是「學習數學或數學相關專業的人」的網站。這不包括我。 –
@ Scorpi0:這裏是一個合適的問題。 @Brendon:你的代碼看起來不錯。我會嘗試一些微不足道的情況:圍繞X軸旋轉+90度,然後檢查結果。然後圍繞Y軸等等。一次只能旋轉一次,始終從原始狀態開始,不會連續旋轉。 – Ali