通常,极坐标从0到π到2 <π(恰好在2 <π>之前,因为它再次等于0)。但是,在使用JavaScript atan2()
函数时,我会得到一个不同的,奇怪的范围:
Cartesian X | Cartesian Y | Theta (θ) =========================================================== 1 | 0 | 0 (0 × π) 1 | 1 | 0.7853981633974483 (0.25 × π) 0 | 1 | 1.5707963267948966 (0.5 × π) -1 | 1 | 2.356194490192345 (0.75 × π) -1 | 0 | 3.141592653589793 (1 × π) -1 | -1 | -2.356194490192345 (-0.75 × π) 0 | -1 | -1.5707963267948966 (-0.5 × π) 1 | -1 | -0.7853981633974483 (-0.25 × π)
如您所见,在达到π(180°)后,它会跳到 - π(-180°),然后再回到0。我怎样才能使用 {0,...,2 π} 而不是 { - π ,. ..,π} ?我一直在尝试考虑每个计算来“修复”这些值,但我也想知道为什么JavaScript会选择这个范围而不是典型的极坐标范围。谢谢!
答案 0 :(得分:8)
atan2
返回该范围内的角度非常标准;例如,这就是C标准库中的atan2
。
如果你想要0..2pi而不是-pi..pi,测试结果是否为负数,如果是,则加2pi。
答案 1 :(得分:4)
如果结果为否定,只需在结果中添加2 * PI
。
function atan2Normalized(x,y) {
var result = Math.atan2(x, y);
if (result < 0) {
result += (2 * Math.PI);
}
return(result);
}
答案 2 :(得分:4)
atan2(y, x)
而非atan2(x, y)
答案 3 :(得分:0)
如何使用范围{0,...,2π}代替{-π,..., π}?
-0
函数会为0
提供与Math.atan2(0, -1)
不同的结果。
例如,3.141592653589793
返回Math.atan2(-0, -1)
,-3.141592653589793
返回[0, 2π)
。
您可以使用此事实来简化等式,以获得X
范围内的结果。
如果您否定Y
和 X | Y | -X | -Y | Math.atan2(-Y,-X)
===========================================================
1 | 0 | -1 | -0 | -1.00π (-3.141592653589793)
1 | 1 | -1 | -1 | -0.75π (-2.356194490192345)
0 | 1 | -0 | -1 | -0.50π (-1.5707963267948966)
-1 | 1 | 1 | -1 | -0.25π (-0.7853981633974483)
-1 | 0 | 1 | -0 | 0.00π (0)
-1 | -1 | 1 | 1 | 0.25π (0.7853981633974483)
0 | -1 | -0 | 1 | 0.50π (1.5707963267948966)
1 | -1 | -1 | 1 | 0.75π (2.356194490192345)
值,请注意您获得的内容:
π
如果您随后将[0, 2π)
添加到结果中,您将获得var theta = Math.atan2(-Y, -X) + Math.PI;
范围内的值。
因此您可以使用:
$scope.result = [];
factoryCities.then(function(data){
$scope.result = data;
});