查找向量之间的有符号角

2022-09-01 05:34:56

如何找到从向量 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.

答案 1

你想用的通常叫做“perp点积”,即找到垂直于其中一个向量的向量,然后找到另一个向量的点积。

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 );

答案 2

如果您在所选的数学库中有一个 atan2() 函数:

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