如何找到从向量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.
如果你在选择你的数学库的ATAN2()函数:
signed_angle = atan2(b.y,b.x) - atan2(a.y,a.x)
要使用通常被称为“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);
完美,谢谢。 – Cerin 2010-01-27 20:50:23
a =(-1,1)和b =(-1,-1),答案应该是pi/2?您应该检查绝对值是否大于pi,如果是,则添加或减去2 * pi。 – 2010-01-27 21:52:02
@Derek 好的。我在实施解决方案时亲自发现了这一点。 – Cerin 2010-01-28 13:06:48