计算2个向量之间的角度,顺时针和从0到2 * pi

时间:2013-11-08 05:46:47

标签: matlab geometry

我有两个带有共同顶点的(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 ??!

提前致谢

2 个答案:

答案 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'答案相同:)