我有两个带有共同顶点的(2-D)向量(我从3个给定点中得到了这两个向量)。我想找到它们之间的角度,从0到2 * pi,我需要它顺时针和正面。我目前使用这个:
v1=[x1 y1]-[X Y];
v2=[x2 y2]-[X Y];
ang = mod(atan2(v1(1)*v2(2)-v2(1)*v1(2),v1(1)*v2(1)+v1(2)*v2(2)),2*pi);
if ang==0
Angle=ang;
else
Angle=360 - (ang*180/pi); % change Radian to Degree
end
虽然它工作正常但我想知道是否有更好的方法来找到角度,也许不使用 if / else ??!
提前致谢
答案 0 :(得分:3)
我假设您要将输出限制为半开间隔[0, 360)
。在这种情况下,只需在结束后执行mod
,在其他转换后,不需要if
:
ang = atan2(v1(1)*v2(2)-v2(1)*v1(2),v1(1)*v2(1)+v1(2)*v2(2));
Angle = mod(-180/pi * ang, 360);
答案 1 :(得分:1)
顺时针角度与atan2
假设的角度完全相反,所以你只需要否定它:
Angle = mod(-atan2(v1(1)*v2(2)-v1(2)*v2(1), v1*v2'), 2*pi) * 180/pi;
这实际上与我现在看到的Bas'答案相同:)