2012-02-29 52 views
0

我一直在試圖找出一個公式來計算出一輛車在給定兩組座標時是左轉還是右轉。 x1,y1在t秒,而x2,y2在t + 1秒。到現在爲止,我一直在使用這樣的:計算兩點間夾角的+/-符號的公式?

double direction = atan2(y2 - y1, x2 - x1) 

然後,我檢查,看看方向是正還是負,找出如果汽車左轉或右轉。這有效,但我不需要知道方向的。我只需要標誌。另外,我想避免使用昂貴的atan2。是否有另一個公式我可以使用這個?謝謝!


EDIT1:

我有速度。兩點之間的時間總是相隔一秒,因此可以根據需要進行計算。


EDIT2: 這就是我通過打開的意思是:我在處理因交通仿真,這不是100%真實的數據。通常情況下,我有車的方向(以度數計)。但是,當一輛車改變車道時,標題是不準確的(似乎是對角行駛)。所以,在這種情況下,我已經確定汽車正在改變車道。我需要將賽車​​的方向傾斜20度左右。我只需要弄清楚改變方向的方向,這就是爲什麼我需要弄清楚在改變車道時車輛「轉向」的方向。

+1

您可以在[Math.SE](http://math.stackexchange.com/)上更快得到答案。 – 2012-02-29 15:39:30

+3

如果只有兩個點,則無法確定汽車是否正在轉向。你可以通過「轉向」擴展你的意思嗎? – 2012-02-29 15:40:10

+0

我同意羅布。你也需要有速度。 – Azrael3000 2012-02-29 15:45:07

回答

1

假設你有車,以速度U,V在點X1,Y1驅動在時間t和在時間t + 1級X2,Y2則方向由

int turnleft = sgn(-v * (x2-x1) + u * (y2-y1)); 
給出例如

根據Is there a standard sign function (signum, sgn) in C/C++?sgn

一些更多的解釋:

左轉如果位置變化與正常速度之間的標量積大於零。速度的旋轉向左(逆時針)。所以左轉時左轉,左轉時左轉,右轉時左轉,左轉右轉。

我忘了:還有一種情況,你根本不轉過身。相應更新

+0

我不明白你和你是什麼。 – BenjaminB 2012-02-29 15:58:46

+0

感謝您的回答! (Ubiquite:v和u是x和y速度分量) – 2012-02-29 16:03:20

2

atan2是肯定的當且僅當組件是肯定的。

+0

+1只是一個美麗的圖。但它並沒有真正回答這個問題,它在y1爲0並且x1> 0時有效,在這種情況下它們已經轉向左側。 – CashCow 2012-02-29 17:14:01