2010-08-05 92 views
6

這與this question類似,但有相反之處。幾何:找到兩點之間的特定距離

我有兩個地理點(緯度,經度)A和B.假設他們相隔40海里。我想計算A點和B點之間10海里點的座標。我確定這是非常基本的數學運算,但已經過了十年,因爲我不得不這樣做數學(我每天使用的其他類型),所以我卡住了。任何指針將不勝感激。我的這個項目的代碼是用Python編寫的,但是數學不是特定於語言的,所以我並不十分關心 - 我只是想知道公式。

+0

大概由「A和B之間的界限」表示球體上的線,而不是3D空間中的直線(它貫穿球體)?後者可能更容易編碼,並可能足夠接近你的目的? – ShreevatsaR 2010-08-05 04:29:15

+0

是的,球體上的線就是我的意思。直線確實更容易計算;我不完全確定它是否足夠接近(我不知道它會在我所處的相對較短的距離上會產生多大的差異)。 – RustyAtMath 2010-08-05 04:46:09

回答

7

你有兩個位置矢量(緯度,經度)。從那些你可以計算你的方位從A點到B點(如果你還不知道的話)。藉助方位和距離,您可以計算出新的經度和緯度。

所有你需要知道的數學在這裏被引用:http://www.movable-type.co.uk/scripts/latlong.html。我很少處理這些東西,很高興將鏈接保存在某處(閱讀:打印)。

+0

這是一個很棒的資源。正是我需要的。謝謝!!! – RustyAtMath 2010-08-05 04:59:39

4

因此,它是這樣的:

x B (x2,y2) 
    \ 
    \ 
    \ 
    \ 
     x C (x3, y3) 
     \ 
     \ 
     \ 
      X A (x1,y1) 

的方式,我會做,這是第一次發現該行的角度:

angle_A_B = arctan((y2-y1)-(x2-x1)) 

然後給出A和C之間的距離是已知的(允許稱之爲distance_A_C):

sin(angle_A_B) = delta_x_A_C/distance_A_C 
delta_x_A_C = distance_A_C * sin(angle_A_B) 
因此

x3 = x1+delta_x_A_C 

同爲Y3的值:

delta_y_A_C = distance_A_C * cos(angle_A_B) 
因此

y3 = y1+delta_y_A_C 

我可能已經得到了混合,所以如果它不工作改變+-跡象。

+0

這不適用於球體,這是這裏的問題。它找到了「直線」,而不是大圓線。 – ShreevatsaR 2010-08-05 06:15:31

+0

啊,好的。沒有意識到它是字面上的地球表面。 – slebetman 2010-08-05 06:36:02

+0

即使這個解決方案與原始問題不是100%準確的,對我來說也是非常有幫助的。 [這個算法的JS實現](https://gist.github.com/1965850) – fguillen 2012-03-03 12:23:46

0

我相信Haversine Formula可以在這裏應用。如果它能幫助我用C#,Java和Javascript實現它?