在这里,我想围绕“起点”矢量旋转“终点”矢量。
这将围绕世界的 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);