由于matlab中的反三角函数(如atan(delta_Y/ delta_X)),其返回值为[-pi/2,pi/2],而我们在实际使用中需要角度范围为[0,2*pi],因此提供一个角度转换代码供大家参考。
function [angleHeadingAB0to360] = getTwoPointVectorHeadAngle0to360(XA,YA,XB,YB)
%getTwoPointVectorHeadAngle0to360 计算两个点AB组成矢量(Vector_AB)的航向角
% 计算全局笛卡尔坐标系XY内两个点AB组成矢量(Vector_AB)的航向角,东偏北,范围 [0,360)deg
delta_X = XB - XA;
delta_Y = YB - YA;
if 0 == delta_X
%delta_X_modify = 0.0000001;%归到正半轴,分母不能为零;
angle_0_to_90 = 0;
else
%delta_X_modify = delta_X;
angle_0_to_90 = atand( abs( delta_Y/delta_X ) ) ;
end
if (delta_X >0) && (delta_Y >=0) %第一象限,范围 [0,90)deg,0度应该会出现
angleHeadingAB0to360 = angle_0_to_90;
elseif (delta_X <= 0) && (delta_Y >0) %第二象限,范围 [90,180)deg
angleHeadingAB0to360 = 180-angle_0_to_90;
elseif (delta_X < 0) && (delta_Y <= 0) %第三象限,范围 [180,270)deg,180度也应该会出现
angleHeadingAB0to360 = 180+angle_0_to_90;
elseif (delta_X >=0) && (delta_Y <0) %第四象限,范围 [270,360)deg
angleHeadingAB0to360 = 360-angle_0_to_90;
elseif (delta_X ==0) && (delta_Y == 0)
angleHeadingAB0to360 =0;
else
fprintf('### log ### error: angleHeadingAB0to360 的求解出错');
end
end
此为一段学习总结,如有问题,欢迎讨论!