使用Math.atan2进行角度及其逆

时间:2014-05-21 17:03:12

标签: javascript math atan2

var vTheta = Math.atan2(v.vy,v.vx);
var obsAngle = Math.atan2(-v.vy,-v.vx);

这是我用来查找矢量角度及其倒数的原始代码。它们稍后在代码中用于一些不同的计算。我想删除第二个Math.atan2函数并将其替换为有助于使用以下代码优化代码:

var vTheta = Math.atan2(v.vy,v.vx);    
var obsAngle = 0;
    if (vTheta >= 0) obsAngle = Math.PI - vTheta;
    else if (vTheta < 0) obsAngle = Math.PI + vTheta;

当我打印两个版本的obsAngle结果时,obsAngle是相同的(或足够接近),但程序的行为不一样。在这两种情况下,obsAngle都在-pi和pi之间。

这两个版本可能导致问题的区别是什么?

1 个答案:

答案 0 :(得分:0)

atan2将返回[-π,π]范围内的值。如果θ≥0,即θ∈[0,π]则π-θ∈[0,π]。同样,如果θ< 0,即θ∈[-π,0)则π+θ∈[0,π]。所以你的第二次计算永远不会产生负值。

第一次计算产生与vTheta - obsAngle = ±π相关的角度。为了模仿,你必须写

if (vTheta >= 0) obsAngle = vTheta - Math.PI;
else             obsAngle = vTheta + Math.PI;