给定一个向量 v1=(0,0,1)
和两个向量 v2=(1,0,0)
和 v3=(-1,0,0)
我希望 v1.angleTo(v2)
和 v1.angleTo(v3)
以返回不同的结果,即 12 PI 和 32 PI.
然而,两者都返回 12 PI:
var v1 = new THREE.Vector3(0, 0, 1);
var v2 = new THREE.Vector3(1, 0, 0);
var v3 = new THREE.Vector3(-1, 0, 0);
v1.angleTo(v2)
1.5707963267948966
v1.angleTo(v3)
1.5707963267948966
看来 angleTo
总是返回较小的角度,即介于 0 和 PI.
怎样才能得到预期的价值行为?
angleTo
总是返回较小的角度。参见 angleTo
在 https:/github.commrdoobthree.jsblobmastersrcmathVector3.js。.
如果角度应始终在一个方向上确定(即逆时针方向或顺时针方向),那么对于二维向量(或二维平面内平行于坐标系两轴平面的n-d向量,如题中所举的例子),简单的解决方法是:。
var orientation = v1.x * v2.z - v1.z * v2.x;
if(orientation > 0) angle = 2*Math.PI - angle;