【发布时间】:2020-03-19 16:53:40
【问题描述】:
我在三维空间中有一个向量。
有什么方法可以得到每个轴上从原点到这个向量的旋转角度。
也就是说,如果向量在 x=6,y=-10,z=20 上
从原点 x=0, y=0, z=0 在轴 x,y 和 z 上向量的角度。
从现在开始在threejs中尝试解决这个问题。 任何帮助都非常感谢
【问题讨论】:
标签: javascript unity3d three.js 3d
我在三维空间中有一个向量。
有什么方法可以得到每个轴上从原点到这个向量的旋转角度。
也就是说,如果向量在 x=6,y=-10,z=20 上
从原点 x=0, y=0, z=0 在轴 x,y 和 z 上向量的角度。
从现在开始在threejs中尝试解决这个问题。 任何帮助都非常感谢
【问题讨论】:
标签: javascript unity3d three.js 3d
2个向量的角度可以用这个公式找到:v1•v2 = |v1||v2| cos(angle)
要找到角度,您需要 acos 2 个向量的点积。
根据文档,在 ThreeJS 中你可以找到这样的点积:
dotproductV1V2 = V1.dot(V2)
然后acos求角度的结果:Math.acos(dotproductV1V2)
编辑:
获取向量各分量角度的示例:
var V1x = new THREE.Vector3(1, 0, 0)
var V1y = new THREE.Vector3(0, 1, 0)
var V1z = new THREE.Vector3(0, 0, 1)
var V2 = new THREE.Vector3(6, -10, 20)
var V2xz = new THREE.Vector3(V2.x, 0, V2.z)
var V2xy = new THREE.Vector3(V2.x, V2.y, 0)
//angle in radian between origin X axis and X axis of V2
var angle_V1V2x = Math.acos(V1x.dot(V2xz.normalize()))
//angle in radian between origin Y axis and Y axis of V2
var angle_V1V2y = Math.acos(V1y.dot(V2xy.normalize()))
//angle in radian between origin Z axis and Z axis of V2
var angle_V1V2z = Math.acos(V1z.dot(V2xz.normalize()))
【讨论】:
V2.y = 0 在 XZ 平面上投影并用 X 轴计算:V1=(1, 0, 0) 这将为您提供 X 轴上的角度。对 Z 轴 (0, 0, 1) 执行相同操作,最后将矢量投影到另一个平面上:例如XY 做V2.z = 0和计算V1=(0, 1, 0)