兩點經緯度求曲面距離

以前有兩點經緯度求曲面距離,然後發現了這個算法,當時沒看懂後來看了這個帖子。

轉自:http://blog.csdn.net/liminlu0314/article/details/8553926

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

這裏寫圖片描述

可是至於這個公式爲什麼是這樣的,今天推導了一下,詳細推導過程如下。首先畫個圖(圖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的弧長就可以了。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章