如何从向量a到b中找到带符号的角度theta?
是的,我知道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.
如何从向量a到b中找到带符号的角度theta?
是的,我知道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.
你想要使用的通常称为“垂线点积”,即找到与其中一个向量垂直的向量,然后找到它与另一个向量的点积。
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 );
如果你的数学库中有 atan2() 函数:
signed_angle = atan2(b.y,b.x) - atan2(a.y,a.x)