簡體   English   中英

尋找向量之間的有符號角

[英]Finding Signed Angle Between Vectors

你如何找到從向量 a 到 b 的帶符號角 theta?

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

但是,這不包含符號(即它不區分順時針或逆時針旋轉)。

我需要一些可以告訴我從 a 旋轉到 b 的最小角度的東西。 正號表示從 +x 軸向 +y 軸旋轉。 相反,負號表示從 +x 軸向 -y 軸旋轉。

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

你要使用的通常稱為“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 );

如果您選擇的數學庫中有 atan2() 函數:

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM