寻找矢量之间的符号角

时间:2010-01-27 20:34:52

标签: java python math trigonometry angle

你如何找到从矢量a到b的有符号角θ:

是的,我知道theta = arccos((a.b)/(| a || b |))。

但是,这不包含符号(即它不区分顺时针或逆时针旋转)。

我需要能够告诉我从a到b旋转的最小角度。正号表示从+ x轴向+ y轴的旋转。相反,负号表示从+ x轴向-y轴的旋转。

assert angle((1,0),(0,1)) == pi/2.
assert angle((0,1),(1,0)) == -pi/2.

2 个答案:

答案 0 :(得分:51)

您想要使用的通常称为“perp dot product”,即找到垂直于其中一个向量的向量,然后使用另一个向量找到点积。

if(a.x*b.y - a.y*b.x < 0)
    angle = -angle;

你也可以这样做:

angle = atan2( a.x*b.y - a.y*b.x, a.x*b.x + a.y*b.y );

答案 1 :(得分:33)

如果您选择的数学库中有atan2()函数:

signed_angle = atan2(b.y,b.x) - atan2(a.y,a.x)