1. 程式人生 > >球座標系下的兩點距離公式

球座標系下的兩點距離公式

https://blog.csdn.net/yu412346928/article/details/42966001

已知兩點經緯度計算球面距離的公式,一搜一大堆,形式如下:

可是至於這個公式為什麼是這樣的,今天推導了一下,詳細推導過程如下。首先畫個圖(圖1),要不然空間想象能力差的話容易犯糊塗。首先對圖1做個大致的說明,紅色的半圓表示赤道,藍色的圓弧表示本初子午線(也就是經度為0的子午線)。球最上方是北極點,點A和點B分別為要計算的兩個點,座標分別為A(jA,wA)和B(jB,wB)。

圖1 示意圖

 

再開始推導之前,我們需要在圖中繪製一些輔助線,便於後面的描述和推導。如圖1所示,A(jA,wA),B(jB,wB)兩點分別為球面上的兩點,座標為經緯度表示。延A、B兩點分別做垂直於赤道平面的垂線交赤道面為C、D兩點。連線C、D兩點,然後過A做CD的平行線交BD與點E。至此,所有的輔助線繪製完畢。假設地球為一個規則的圓球,半徑為R(其實地球是一個橢球體,赤道的半徑比極地的半徑稍微大一點點)。

第一步:確定已知條件,

 

第二步:在直角和直角中有:

 

第三步:在平面ABCD中,有:

 

第四步:在直角中,使用勾股定理可以得到AB的直線長度。如下:

 

第五步:這裡需要引入一個公式(5),就是大名鼎鼎的餘弦定理,假設三角形的三個角為A,B,C,則有:

把上面的公式(1)、(2)、(3)、(5)帶入(4)中,然後整理可以得到:

 

最後,通過整理得到AB之間的直線距離為:

第六步:我們已經知道AB的直線距離,那麼AB的弧長距離可以先通過計算中對應的圓心角

,然後用弧長公式計算出來。這裡在依舊使用餘弦定理公式(5),經過變形可以得到:

 

把式(6)帶入式(7),化簡得到:

 

最終,我們得到了一個關於圓心角的餘弦值的公式:

 

第七步:知道圓心角,計算弧長的公式很簡單,使用半徑乘以圓心角(弧度單位)即可:

 

所以最後我們就得到了球面上AB的距離應該是:

最後使用公式(10)就可以編寫程式碼來計算球面上任意兩點間的最短距離了。這裡使用的是一個規則的球來代替的橢球的,肯定會有誤差的,一般都用這個公式來進行計算。程式碼就不寫了,也就一兩句話就出來了。最後需要注意的就是,需要把經緯度都化成弧度單位。

…………………………………………………華麗的分割線………………………………………………
……………………………………以下內容更新於2013年1月30日…………………………………………

昨天使用立體幾何的知識推導了一下球面兩點的距離公式,發現比較複雜,今天想到一個簡單的方法,使用空間直角座標系來推導,很方便。首先我們需要建立一個空間座標系:在赤道平面內,X軸由球心O指向本初子午線,Y軸在赤道平面內垂直於X軸,Z軸垂直於赤道平面朝向北極。還是假設AB兩點的經緯度座標為:A(jA,wA),B(jB,wB)。由該座標系的定義以及經緯度的定義可以把上面的AB兩點的座標轉換為該座標系中的座標如下:

 

由兩點距離公式可以得到AB的直線距離為:

 

對於球面上的任意一個點(X,Y,Z),都有:

 

把上面的公式整理就可以得到(下面用到了一個積化和差公式):

 

好了,大功告成,是不是比用立體幾何要簡單的多。接下來就是用上面的弦長和弧長的關係來計算AB的弧長就可以了。