2

我有两个(2-D)向量,它们有一个共同的顶点(我用 3 个给定点制作了这 2 个向量)。我想找到它们之间的角度,从 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 ??!

提前致谢

4

2 回答 2

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);
于 2013-11-08T06:47:21.990 回答
1

顺时针角度与假设完全相反atan2,因此您只需否定它:

Angle = mod(-atan2(v1(1)*v2(2)-v1(2)*v2(1), v1*v2'), 2*pi) * 180/pi;

本质上,这与我现在看到的 Bas 的答案相同:)

于 2013-11-08T08:30:24.597 回答