我需要爲測試目的創建(大)空間多邊形。有沒有一種算法可以創建一個隨機形狀的多邊形,並保留在邊界的包絡中?我使用OGC Simple的東西,所以創建知名文本的例程是最有用的,選擇的語言是C#,但並不重要。創建封閉的空間多邊形
2
A
回答
1
在這裏你可以找到兩個如何生成隨機凸多邊形的例子。他們都是在Java中,但應該很容易將它們改寫爲C#:從太陽
- Generate Polygon例如
- 從JTS郵件列表,根據發電機組的發佈Minimum Area bounding box by Michael Bedward
另一種可能的方法隨機點並採用曲面細分算法Delaunay。
一般來說,產生合適的隨機多邊形的問題並不是微不足道的。
1
你的邊界包絡是什麼形狀?如果它是一個矩形,然後生成你的隨機多邊形作爲[0,1] x [0,1]內的點列表並縮放到矩形的大小。
如果信封不是矩形,則會變得更棘手。在這種情況下,您可能會獲得最佳性能,只需在單位正方形內生成點並拒絕位於單位正方形部分的任何不在您選擇的邊界包圍範圍內的位置。
HTH
馬克
補充
如果你想只有你會使用的凸包算法中的一個凸多邊形。由於您似乎只想要凸多邊形,因此您可以使用圓形掃描的建議。
但是,您可能會發現沿平行於x軸或y軸的直線掃描會更簡單。假設x軸。
- 將點排序爲x次。
- 選擇最左邊的(即第一個)點。在這個點的y座標上繪製一個穿過單位正方形的假想水平線。準備沿假想線上方的多邊形的邊界創建一個點列表,並沿着它下面的邊界創建另一個列表。
- 選擇下一個點。將其添加到由y座標確定的上邊界或下邊界列表中。
- 繼續操作,直到出現問題。
這將生成凸和非凸多邊形,但非凸將是一個相當有限的形式。沒有入口或曲折。
的另一種思路
爲了避免邊交叉,避免產生單位正方形你可以內部的隨機點之後圓形掃:
- 產生極座標的單位圓內隨機點即(r,theta)。
- 以theta順序對點進行排序。
- 轉換爲直角座標。
- 將單位圓縮放到您選擇的邊界橢圓。
關閉我的頭頂,這似乎工作確定
1
他們是否真的需要是隨機的,或將一些真正的高鐵總站呢?因爲如果會的話,只需去http://koordinates.com/並下載幾層。
相關問題
- 1. 從邊界點創建封閉多邊形
- 2. 多邊形不封閉
- 3. 創建封閉區域多邊形的算法
- 4. 創建多邊形
- 5. R,空間多邊形
- 6. 在封閉的多段線上畫一個多邊形
- 7. Python龜圖形填充非封閉多邊形
- 8. QGraphicsPolygonItem繪製一個開放的(不封閉的)多邊形
- 9. 如何讀取封閉多邊形內的像素?
- 10. 一個簡單的封閉多邊形曲線生成算法
- 11. 是封閉的多邊形網格翻轉?
- 12. 計算平面上封閉多邊形的面積
- 13. 爲封閉多邊形尋找Douglas-Peucker算法的好起點
- 14. 創建段和另一多邊形的多邊形
- 15. 獲取通過移動多邊形創建的多邊形
- 16. Java:使用創建的多邊形創建星形
- 17. 如何從多邊形表創建多邊形
- 18. 從多段線創建多邊形
- 19. SQL空間多邊形向內
- 20. Solr4空間故障排除多邊形
- 21. 逗號VS在SVG多邊形空間
- 22. R空間多邊形採樣錯誤
- 23. 地理空間查詢多邊形(doctrine2)
- 24. MemSQL多邊形地理空間聯合
- 25. Oracle空間計算區域內的多邊形組中的一組多邊形內部的多邊形ID
- 26. 創建用點填充的多邊形
- 27. 創建一定半徑的多邊形
- 28. 用JS創建多邊形的路標
- 29. 多邊形沒有關閉
- 30. 重新排列包含端點的數組以創建Python中的封閉多邊形
好主意,是否有一種'排序'他們的方式,所以沒有交叉線或OGC簡單處理。我能想到的唯一技術就是找到所有點的中心,然後依次循環掃描每個點。 – MrTelly 2010-01-07 12:10:15
我對OGC一無所知,但對計算幾何知之甚少,所以我的幫助不可能比現在更具體。 – 2010-01-07 12:34:12