我有一個System.Windows.Shapes.Polygon對象,其佈局完全由一系列點確定。我需要確定這個Polygon是否自相交;即,如果多邊形的任何邊在不是頂點的點處與任何其他邊相交。有沒有簡單/快速的方法來計算這個?檢查多邊形是否自相交
16
A
回答
27
輕鬆,緩慢,低內存佔用:比較對所有其他各段和檢查交叉點。複雜性O(n )。
稍快一點,中等內存佔用量(上述修改版本):在空間「桶」中存儲邊緣,然後在每個桶的基礎上執行上述算法。複雜性O(n/m)對於m料斗(假設均勻分佈)。
快速&高內存佔用空間:使用空間散列函數將邊緣拆分爲存儲桶。檢查碰撞。複雜性O(n)。
最後是我最喜歡的,因爲它有良好的速度 - 內存平衡,尤其是Bentley-Ottmann algorithm。實施也不是太複雜。
3
檢查是否有任何一對不連續線段相交。
2
爲了完整起見,我在本次討論中增加了另一種算法。
假設讀者知道軸對齊的邊界框(如果不是Google的話)可以非常高效地使用「掃描和修剪算法」快速查找具有AABB衝突的邊對。 (去谷歌上查詢)。然後在這些對上調用交集例程。
這裏的優點是,你甚至可以相交一個非直邊(圓和樣條曲線),這種方法雖然幾乎相同,但效率更高。
相關問題
- 1. 檢查多邊形是否自相交谷歌地圖v3
- 2. 是否可以使用Clipper檢查多邊形是否與自身相交?
- 3. 如何檢測多邊形是否具有自相交?
- 4. 如何檢查點是否與多邊形相交
- 5. 如何檢查Postgres中的兩個多邊形是否相交?
- 6. 檢查是否多邊形是凸
- 7. 檢測是否折線相交多邊形
- 8. 檢測多邊形是否有相交線(領結)
- 9. 檢測n邊多邊形的自交?
- 10. 檢查點是否在多邊形中
- 11. 檢查點是否多邊形
- 12. 檢查一些多邊形是否相互重疊
- 13. 檢查Google Map Point是否與PHP中的多邊形相關
- 14. Mongodb和查詢搜索與多邊形相交的多邊形
- 15. 算法劃分自相交多邊形
- 16. 多邊形相交Python Shapely
- 17. 檢查點是否位於(或靠近)凸多邊形邊緣
- 18. 如何確定線是否相交簡單多邊形?
- 19. 如何確定兩個多邊形是否使用Clipper相交?
- 20. 如何判斷兩個多邊形是否相交?
- 21. 一條線是否與多邊形相交?
- 22. 算法凹而不是自相交多邊形工會
- 23. 多邊形與線段相交的多邊形邊信息交集
- 24. 如何檢查是否一個點是一個多邊形
- 25. 如何將自相交多邊形劃分爲簡單的多邊形?
- 26. 檢查點是一個多邊形
- 27. 合併相交的多邊形一個多邊形
- 28. 多邊形多邊形相交的特殊情況
- 29. turf.js來自OpenLayers3的自相交多邊形的相交錯誤Draw
- 30. POSTGIS多邊形ST_Intersects檢查
它們應該全部相交於頂點;那麼問題就成爲檢查任意一組線段之間的非頂點相交的最快方法。 – GWLlosa 2011-02-02 15:18:38
好點,編輯它來檢查不連續的段是否相交。我不認爲有一個內置的方法,你必須寫一個方法。開始獲取Polygon.Points – 2011-02-02 15:21:37