three.js - Three.js Vector.angleTo:如何同时获得更大的价值
问题描述
给定一个向量v1=(0,0,1)
和两个向量v2=(1,0,0)
,v3=(-1,0,0)
我希望v1.angleTo(v2)
并v1.angleTo(v3)
返回不同的结果,即1/2 PI和3/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
总是返回较小的角度,即0和PI之间的值。
如何获得预期值/行为?
解决方案
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;
推荐阅读
- javascript - 是的,“形状”功能有什么作用?
- c++ - 如何使用 Boost::GIL 垂直翻转图像
- c - 我无法在 c 编程中找到在电话簿中搜索姓名的好方法
- node.js - 尝试将 React/Redux 应用程序部署到 Heroku....现在我收到 R14 内存错误
- ios - 启动应用程序时出现 Xcode 错误错误:无法捕获视图层次结构
- git - 新贡献者未显示在公共存储库中
- javascript - 构建 ERD 图但结果是非常复杂的结构数组,
- javascript - 如何在不使用第三方库的情况下使用 Node.js 读取 PDF 文件?
- node.js - 尝试在 heroku 上部署后,数据库停止向节点服务器发送数据。我只是得到一个未决的承诺
- java - javafx 文件写入;当我的电脑失去能量时,里面的文件被清理了