首页 > 解决方案 > Three.js Vector.angleTo:如何同时获得更大的价值

问题描述

给定一个向量v1=(0,0,1)和两个向量v2=(1,0,0)v3=(-1,0,0)我希望v1.angleTo(v2)v1.angleTo(v3)返回不同的结果,即1/2 PI3/2 PI

但是,两者都返回1/2 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总是返回较小的角度,即0PI之间的值。

如何获得预期值/行为?

标签: three.js

解决方案


angleTo总是返回较小的角度。请参阅https://github.com/mrdoob/three.js/blob/master/src/math/Vector3.jsangleTo中的实现。

如果应始终沿一个方向确定角度(即逆时针或顺时针),则为 2d 矢量(或平行于坐标系的双轴平面的 2d 平面中的 nd 个矢量,如给出的示例所示)的简单解决方案在问题中)是:

var orientation = v1.x * v2.z - v1.z * v2.x;
if(orientation > 0) angle = 2*Math.PI - angle;

推荐阅读