计算两个向量之间的夹角,顺时针方向且从0到2*pi。

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语句?!

提前感谢。


你可以使用余弦定理...http://zh.wikipedia.org/wiki/余弦定理 - bla
你可以这样做,而不是使用 if...elseAngle=(360 - (ang*180/pi))*(ang~=0) 我想。 - Dan
你有没有考虑过使用复数进行编程?在这里,它似乎非常有用。 - Robert Seifert
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);

1

顺时针角度与atan2假设的完全相反,所以你只需要取反它:

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

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


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接