2016-03-17 29 views
1

我已經在下面給出兩個多邊形,其最小值和最大值,經緯相交:檢查多邊形在C++中

Polygon A: minimum_latitude=2.089 degree, maximum_latitude=2.93 degree, minimum_longitude=-122.95 degree, maximum_longitude=-122.85 degree 

Polygon B: minimum_latitude=2.1 degree, maximum_latitude=2.83 degree, minimum_longitude=-121.95 degree, maximum_longitude=-120.85 degree 

如何檢查在C++中是否多邊形相交(或包含在)多邊形B還是不?

我的經度和緯度都是度。我是否需要將它們轉換爲弧度以檢查多邊形是否相交?

檢查交叉點的一種方法是檢查多邊形B的minimum_latitude是否位於多邊形A的minimum_latitude和maximum_latitude之間,反之亦然?這是檢查的正確方法。我是否需要將經緯度轉換爲弧度才能執行相交測試。

+0

我可以想到多邊形,這將使你在最後一段給出的想法解決這個不工作;) – BitTickler

+0

@BitTickler好的。那麼你能否請建議一些解決辦法:) –

+0

是不是兩軸對齊的矩形交? –

回答

2

如果多邊形不相交,可以使用最小/最大值作爲快速檢查;如果邊界矩形重疊,封閉的多邊形可能會相交......但您需要進一步檢查才能確定。除非您使用的多邊形來存儲只有簡單的矩形;)

+0

非常感謝您的回覆。我正在使用多邊形來存儲簡單的矩形。還有一個問題:我應該在檢查交叉點之前將度數轉換爲弧度嗎 –

+0

只要所有的東西都使用相同的單位,就沒問題。 –

+0

謝謝:)有時我還需要將多邊形展開一定距離d = 10公里。那麼,你認爲弧度會更適合擴展多邊形嗎? –

2

有一個偉大的Polygon Collision算法,可能只是你在找什麼: 基本上,你檢查的多邊形之間的最短距離。

2

無需任何外部庫等

  1. 排除不通過範圍檢查相交的康斯坦丁建議
  2. 檢查POLY1的任何一點POLY2內再次簡單的範圍檢查在兩個方向上的多邊形。如果有的話,如果它們相交,則包含它。
  3. 控制相反的一組2
  4. 使用2和3的結果準備候選線,然後從多邊形發送光線到另一個多邊形的線。如果有任何匹配他們正在相交。

多數民衆贊成它。

這是最簡單和最快捷的方法。如果你想通過使用排序數據或八分法等幾個優化是可能的。

+0

這仍然適用於兩個多邊形相交,但沒有點休息在另一個多邊形內?例如,兩個呈十字形的矩形。 –

+0

那麼你將需要線相交。仍然高於答案將提供快速和適當的過濾 –