距離之間的兩個
回答
分而治之:
定義表示一對摺線的和最低限度的距離他們的axis-aligned minimum bounding boxes (AAMBB)之間的數據結構:
pair = (poly_a, poly_b, d_ab)
)創建
pair
數據estructures空隊列,使用距離d_ab
作爲關鍵。使用最初的折線創建一個
pair
數據結構並將其推入隊列。我們將保留目前發現的多段線之間最小距離的變量(
min_d
)。將其設置爲無限。重複:從隊列
流行與最小距離
d_ab
的元素。如果
d_ab
大於min_d
我們就完成了。如果任何折線
poly_a
或poly_b
包含一個唯一段:- 用蠻力找到那麼之間的最小距離,並相應更新
min_d
。
- 用蠻力找到那麼之間的最小距離,並相應更新
否則:
鴻溝既折線
poly_a
和半poly_b
,例如:(1-7) --> { (1-4), (4-7) }
(8-12) --> { (8-10), (10-12) }
使兩者本身叉積TS,創建4層新
pair
數據結構,然後推入隊列Q.
在平均情況下,複雜度爲O(N *日誌N),最壞的情況下可能是O( N²)。
更新:在Perl中實現的algorithm。
這種問題的「標準」方式是構造幾何實體的Voronoi圖。這可以在時間O(N日誌N)中完成。
但是這種線段圖的構建很困難,您應該使用現成的解決方案,例如CGAL。
voronoi克作爲一個查找表可用於查找從任何地方最近的點,如果這些點不是將要改變,你必須從許多其他點查找最近的一個,它可能是值得的產生voronoi加快查找。但我沒有看到它如何幫助計算兩條多段線之間的距離? – gordy
- 1. 兩個GEO位置之間的距離
- 2. 兩個地址之間的距離
- 3. 兩個經緯度之間的距離
- 4. 兩個詞之間的語義距離
- 5. 兩個矩形之間的距離
- 6. 編輯兩個圖之間的距離
- 7. 兩個地理點之間的距離?
- 8. 道路距離,兩地之間的實際距離
- 9. 如何獲得距離眩暈兩點之間的距離
- 10. 兩點之間的Cloudmade距離
- 11. 兩點之間的測地距離
- 12. 計算兩次之間的距離
- 13. 測量兩條線之間的距離
- 14. Hive:兩點之間的距離
- 15. Android - 兩座城市之間的距離
- 16. Matlab中兩點之間的距離
- 17. 獲取兩個地理點之間的距離 - 離線地圖
- 18. 每個文檔中兩點之間的距離和距離小於英里的距離
- 19. A,B之間的距離
- 20. 車牌之間的距離
- 21. 如何找到android中的兩個區域之間的距離
- 22. php中的兩個城市之間的距離
- 23. 得到iphone上的兩個位置之間的距離
- 24. 使用ST_SPHERICALDISTANCE的兩個地理座標之間的Teradata距離
- 25. 的Xcode在谷歌兩個地點之間的距離映射
- 26. 顯示ListView上的兩個位置之間的距離
- 27. 計算pyspark中兩個數據幀的行之間的距離
- 28. 最快的方法來計算兩個CGPoints之間的距離?
- 29. 2個MKAnnotations之間的距離?
- 30. 2個latlon點之間的距離
這看起來像[quadtrees](https://en.wikipedia.org/wiki/Quadtree)可能會有所幫助 - 但是除了我的頭頂之外,我沒有比這更有用的了。 – hnefatl
不知道答案,但我猜測一些基於四叉樹的算法必須是可能的,其中只計算附近元素之間的點線距離。 – jdehesa
基於邊界框的方法可能會有所幫助。計算部分多段線的邊界框(例如,A的點1 ... 4,4 ... 7和B的8 ... 10,10 ... 12)。對於每一對盒子,你可以計算最小和最大距離,並丟棄無法與最佳對成對競爭的對,遞歸地提煉盒子,直到它們都是2點(1行)盒子,你可以精確地計算。似乎是O(N logN)。 –