Math 如何在THREE.js中找到两个向量之间的旋转矩阵
我正在寻找在THREE.js中找到两个定义向量之间的旋转矩阵的方法 比如说Math 如何在THREE.js中找到两个向量之间的旋转矩阵,math,matrix,vector,three.js,Math,Matrix,Vector,Three.js,我正在寻找在THREE.js中找到两个定义向量之间的旋转矩阵的方法 比如说 v1=新的三个矢量3(1,1,1) v2=新的三个向量3(1,1,-1) 我需要这个旋转矩阵来在下一步旋转整个对象。您可以从两个单位长度向量v1和v2定义旋转,如下所示: var quaternion = new THREE.Quaternion(); // create one and reuse it quaternion.setFromUnitVectors( v1, v2 ); 在您的情况下,首先需要规范化向
v1=新的三个矢量3(1,1,1)
v2=新的三个向量3(1,1,-1)
我需要这个旋转矩阵来在下一步旋转整个对象。您可以从两个单位长度向量
v1
和v2
定义旋转,如下所示:
var quaternion = new THREE.Quaternion(); // create one and reuse it
quaternion.setFromUnitVectors( v1, v2 );
在您的情况下,首先需要规范化向量
然后,可以使用以下模式将该旋转应用于对象:
var matrix = new THREE.Matrix4(); // create one and reuse it
matrix.makeRotationFromQuaternion( quaternion );
object.applyMatrix( matrix );
或者,如果不需要矩阵,可以直接应用四元数:
object.applyQuaternion( quaternion );
three.js r.86我不使用四元数,而是这样做(也不要使用three.js): 为第一个向量V1构造4x4变换矩阵(V1,V2位于其XY平面上,V1为X轴) 现在围绕Z轴应用旋转变换矩阵
double angle = acos( (V1.v2)/(|V1|.|V2|) )
- 绕Z轴旋转+/-角度
- 角度符号取决于Y轴叉积操作数的顺序
- 现在还不确定,但你会看到的
- 如果设置错误,V2将位于另一侧
axis.cross(v1,v2);angle=v1.angleTo(v2);matrix.makeRotationAxis(轴,角度);object.applyMatrix(矩阵);
是的,这正是我要找的。我想你可以把它添加到你的答案中,然后我会把它标记为接受。我在答案中提供的方法是数值上最稳定的,也是我推荐用户使用的方法。(另一方面,第二种方法具有轴角度依赖性——在任何一种情况下都需要中间步骤。如果两个向量平行,则轴角度定义不明确。)
double angle = acos( (V1.v2)/(|V1|.|V2|) )