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