2017-02-25 209 views
-3

我正在嘗試測量兩個點之間相對於X軸的角度(度)。Math.Atan2在轉換爲度數時給出的值不正確

通過觀察上堆棧溢出其他職位,我一直在使用下面的代碼:

private double GetAngleBetweenTwoPoints(double x1, double y1, double x2, double y2) 
{ 
    return Math.Atan2(y2 - y1, x2 - x1) * 180.0/Math.PI; 
} 

的問題是,這似乎是對一些價值做工精細,而不是其他。例如,傳入(0,0,1,1)正確返回值45.但是,傳入(0,0,2,1)返回26.565051177078時,我期望22.5。

我在做什麼錯?

+1

沒有錯。這是正確的,你只是期待錯誤 – Li357

+0

是的,我現在明白這一點更好。謝謝 –

回答

2

0.5的反正切值是26.565度,而不是22.5度。

你可以通過取26.565度的正切值來看到這一點,它給出的數值非常接近0.5,而22.5度的正切值大致爲0.414。

(NB切線是週期性的,也有其它的值x爲其tan x爲0.5的無限數量,但是這是不相關的這個問題。)

+0

謝謝。我有一種感覺,我只是在錯誤地思考這個問題。事實上,它非常接近45度的平分線,這使我做出了一個錯誤的假設。 –

0

(1,1)用於角度的一半角度線是經過(1,1)(sqrt(2),0)中點的角平分線,它們都在半徑爲sqrt(2)的圓上。因此,您正在尋找(0.5+\sqrt(0.5), 0.5)的角度22.5°