0

在这里,我想围绕“起点”矢量旋转“终点”矢量。

这将围绕世界的 z 轴旋转端点向量:

 endpoint.copy(new THREE.Vector3(startpoint.x,startpoint.y,startpoint.z));
 endpoint.add(new THREE.Vector3(0, scale, 0 ));

 var matrix = new THREE.Matrix4().makeRotationAxis( axis_z, angle );
 endpoint.applyMatrix4( matrix );

我试图将向量的平移保存到临时矩阵,并在应用旋转后,将平移恢复到端点向量:

 endpoint.copy(new THREE.Vector3(startpoint.x,startpoint.y,startpoint.z));
 endpoint.add(new THREE.Vector3(0, scale, 0 ));  

 var translateMatrix = new THREE.Matrix4().makeTranslation(endpoint.x, endpoint.y,   endpoint.z);
 var translation = new THREE.Matrix4().copyPosition(translateMatrix); 
 translateMatrix.makeRotationAxis(axis_z, angle);
 translateMatrix.copyPosition(translation);
 endpoint.applyMatrix4(translateMatrix);

此代码适用于旋转,但所有翻译都是错误的。有没有一种简单的方法可以相对于另一个向量进行向量旋转?

UPD。解决了这个问题。我是瞎子。不需要翻译。我必须做的:对向量 delta(端点 - 起点)应用旋转,最后,将旋转后的 delta 添加到起点(起点 + delta):

var vector_delta = new THREE.Vector3().subVectors(endpoint, startpoint);
vector_delta.applyAxisAngle( axis_z, rota );
endpoint.addVectors(startpoint, vector_delta); 
4

0 回答 0