2016-09-12 41 views
0

我需要計算三個地理位置之間的角度,其中兩個地理位置總是相同的,並且只有其中一個正在改變(例如用戶正在行走時)。三個地理位置之間的角度

enter image description here

第一點是用戶的開始位置。第二點是用戶的當前位置,所以在開始時第一點等於第二點。第一點和固定點總是相同的。我有每個點的經度和緯度。

我試圖使用這個公式:

double angle1 = Math.atan2(startingLocation.getLongitude() - destinationLocation.getLongitude(), startingLocation.getLatitude() - destinationLocation.getLatitude()); 
double angle2 = Math.atan2(currentLocation.getLongitude() - destinationLocation.getLongitude(), currentLocation.getLatitude() - destinationLocation.getLatitude()); 

return Math.toDegrees(angle1 - angle2); 

但是例如當第一點==第二點i以外的程度爲0但是它給我奇怪的結果像176度。哪裏有問題?

+0

@ Sabish.M我只是借用了這個主題的圖片。 – TomTom

回答

0

角度不同品系可以通過下面的函數來計算

public static double angleBetween2Lines(Line2D line1, Line2D line2) 
{ 
    double angle1 = Math.atan2(line1.getY1() - line1.getY2(), 
          line1.getX1() - line1.getX2()); 
    double angle2 = Math.atan2(line2.getY1() - line2.getY2(), 
          line2.getX1() - line2.getX2()); 
    return angle1-angle2; 
} 

來源:Calculating the angle between two lines without having to calculate the slope? (Java)

如果你的出發點是(x1,y1),終點爲(x2,y2)和固定點是(x3,y3)那麼你應該使用

double angle1 = Math.atan2(y3-y1,x3-x1); 
double angle2 = Math.atan2(y3-y2,x3-x2); 
double result = angle1-angle2; 
+0

你的第二個解決方案是正確的。謝謝! – TomTom

+0

@TomTom:不客氣:) –

0

使用此

double theta = 180.0/Math.PI * Math.atan2(x1 - x2, y1 - y2); 
+0

這第三個地理定位呢? – TomTom

相關問題