所以这是一个很难的问题。我正在使用three.js
,我需要计算一个特定的向量
我有一个向量(让我们称之为C
),我有(r)
形式的轮换euler
。现在我想计算第二个向量(X)
,在应用了旋转(X)
的情况下减去自身euler
,将等于第一个向量。
所以在伪代码中:
X - X(r) = C
答案 0 :(得分:0)
将euler
转换为3x3矩阵。请注意,three.js
使用Tait-Bryan angles而不是正确的Euler 角度。通过乘以R
的顺序,从these axis rotation matrices构建所需的矩阵Rz * Ry * Rx
。
请注意X = I * X
其中I
是3x3单位矩阵。
等式变为(I - R) * X = C
,这很容易反转:X = inverse(I - R) * C
。 (Matrix3.getInverse)
编辑:如何计算R
:
使用标准旋转矩阵:
对于euler = (x, y, z)
,R = Rz(z) * Ry(y) * Rx(x)
:
var c_x = Math.Cos(euler.x), s_x = Math.Sin(euler.x);
var Rx = (new Matrix3()).set(
1, 0, 0,
0, c_x, -s_x,
0, s_x, c_x
);
// and similarly with Ry and Rz
最后:
var R = Rz.multiply(Ry.multiply(Rx));
var ImR = (new Matrix3()).set(
1.0 - R.elements[0], -R.elements[1], -R.elements[2],
-R.elements[3], 1.0 - R.elements[4], -R.elements[5],
-R.elements[6], -R.elements[7], 1.0 - R.elements[8]
);
// multiply ImR.getInverse() with C to get X