如何在THREE.js中找到两个向量之间的旋转矩阵

kri*_*dzi 9 math vector matrix three.js

我正在寻找在THREE.js中找到两个定义矢量之间的旋转矩阵的方法.

例如

v1 = new THREE.Vector3(1, 1, 1) v2 = new THREE.Vector3(1, 1, -1)

我需要这个旋转矩阵来在下一步中旋转整个对象.

Wes*_*ley 18

您可以从两个单位长度向量定义旋转v1,v2如下所示:

var quaternion = new THREE.Quaternion(); // create one and reuse it

quaternion.setFromUnitVectors( v1, v2 );
Run Code Online (Sandbox Code Playgroud)

在您的情况下,您需要首先规范化矢量.

然后,您可以使用以下模式将该旋转应用于对象:

var matrix = new THREE.Matrix4(); // create one and reuse it

matrix.makeRotationFromQuaternion( quaternion );

object.applyMatrix( matrix );
Run Code Online (Sandbox Code Playgroud)

或者,如果您不需要矩阵,则可以直接应用四元数:

object.applyQuaternion( quaternion );
Run Code Online (Sandbox Code Playgroud)

three.js r.86

  • three.js是基于四元数的.但是如果你坚持,先将矢量标准化并设置'​​axis.cross(v1,v2); angle = v1.angleTo(v2); matrix.makeRotationAxis(axis,angle); object.applyMatrix(matrix);` (3认同)
  • 我在答案中提供的方法是数值最稳定的,是我建议用户使用的方法.(另外,第二种方法具有轴角依赖性 - 在任何一种情况下都需要中间步骤.如果两个矢量是平行的,则轴角度不是很明确.) (3认同)