2010-09-21 77 views
1

我看到很多使用Douglas-Peucker折線簡化算法生成GPolyline的各種編程語言的例子,用於Google地圖。 該算法在計劃中表示爲折線時,涉及計算點與線之間的距離(通過兩個其他點)。Douglas-Peucker-從一個點到一個圓的最短圓弧,在一個球體的表面上

到目前爲止,我所見過的所有例子都是以一種非常天真的方式應用算法,只需用經度和緯度代替x和y即可。只要折線非常局部,不太靠近極點,並且不穿過180°子午線,這可能會產生可接受的結果,但是我希望實現更一般的算法。所以,如果我沒有弄錯,我需要計算球體表面上最短弧的長度,從一個點到通過球體表面的其他兩個點的圓,中心其中與球體的中心(地球)重合。

有人知道計算這個長度的公式嗎?

在此先感謝

回答

2

我會試着表達單位向量pq,並[R方面的一切,它可以在一個單位球被認爲是點Σ中心在原點。您可以通過按地球半徑放大將其轉換爲地面數量。有一些background material here

我們想要找的大圓距離dp到大圓Ç通過q[R去。 Ç是平面P和球體Σ,其中P是通過qř經過平面的交點,並且原點。 d只是pp之間的角度θ(以弧度表示)。爲P法線矢量是歸一化互產物q × ř/SIN φ,其中φ是qř之間的角度。

我們結束了

θ =反正弦(p ⋅(q × [R)/罪φ)

正如我所說的,這裏的一切得到由半徑放大地球的R。所以三點是* R *** p **,* R *** q **,* R *** r **,距離爲R θ。

但是,如果您只想找到具有最短距離的點/線組合,則可以省略乘以R。事實上,你可以省略反正弦(),只是看p ⋅(q × [R)/罪φ的相對大小。

+0

明白了。謝謝。你是非常好的http://www.youtube.com/watch?v=iZtbASCE7ZY – 2010-09-22 17:25:28

相關問題