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之间。
这两个版本可能导致问题的区别是什么?
答案 0 :(得分:0)
atan2
将返回[-π,π]范围内的值。如果θ≥0,即θ∈[0,π]则π-θ∈[0,π]。同样,如果θ< 0,即θ∈[-π,0)则π+θ∈[0,π]。所以你的第二次计算永远不会产生负值。
第一次计算产生与vTheta - obsAngle = ±π
相关的角度。为了模仿,你必须写
if (vTheta >= 0) obsAngle = vTheta - Math.PI;
else obsAngle = vTheta + Math.PI;