在目标定位过程中,为了计算同一目标在不同坐标系下的坐标值,可能需要用到角度计算函数atan或atan2.
例如:毫米波雷达给出目标在自身直角坐标系下的坐标(x,y),以及雷达自身的经纬度(longitude,latitude),为了计算目标点的经纬度,可以利用(x,y)计算目标距离和方位角,根据一点经纬度和目标点距离和方位角(ps:一般方位角指与正北方向夹角)得到目标点经纬度。
后续文章会给出具体经纬度、距离、方位角计算的方法,本文只关注atan和atan2函数
atan:
double atan(double x/y);
函数计算正切值为 x/y 的角的度数,以弧度表示,区间为(-π/2, π/2),也就是说atan()函数不能确定目标所在的象限,例如求得的度数是 45°,并不能说明是第一象限的角度,还有可能是第三象限的角度。如果想进一步确定角度所在的象限,请使用 atan2()。
ps:不过单个毫米波雷达也探测不到第三第四象限。
atan2
double atan2(double x,double y);
atan2() 函数的功能是求 x/y 的反正切值,以弧度表示,取值范围为(-π,π]。atan2() 是 atan() 的增强版,能够确定角度所在的象限。注意,x 和 y 同时为 0 时将导致域错误(domain error),因为此时的角度是不存在的,或者说是没有意义的。
个人理解atan2小技巧:atan2(x,y)得到的角度是和后一参数y坐标轴正方向的夹角,前一参数x坐标轴的方向决定了夹角的正负方向(即y轴正向逆时针旋转为正还是为负)。