0
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 之间。

这两个版本有什么区别会导致问题?

4

1 回答 1

0

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

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

if (vTheta >= 0) obsAngle = vTheta - Math.PI;
else             obsAngle = vTheta + Math.PI;
于 2014-05-22T06:34:37.440 回答