计算另一个矢量和旋转的3D矢量

时间:2018-04-27 12:21:05

标签: javascript vector 3d three.js

所以这是一个很难的问题。我正在使用three.js,我需要计算一个特定的向量 我有一个向量(让我们称之为C),我有(r)形式的轮换euler。现在我想计算第二个向量(X),在应用了旋转(X)的情况下减去自身euler,将等于第一个向量。
所以在伪代码中:

X - X(r) = C

1 个答案:

答案 0 :(得分:0)

  1. euler转换为3x3矩阵。请注意,three.js使用Tait-Bryan angles而不是正确的Euler 角度。通过乘以R的顺序,从these axis rotation matrices构建所需的矩阵Rz * Ry * Rx

  2. 请注意X = I * X其中I是3x3单位矩阵。

  3. 等式变为(I - R) * X = C,这很容易反转:X = inverse(I - R) * C。 (Matrix3.getInverse

  4. 编辑:如何计算R

    • 使用标准旋转矩阵:

      enter image description here

    • 对于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
      
相关问题