2014-04-11 76 views
1

如何找到2D段(凸面)與2D段重疊(純重疊,不鄰接還是接觸)?環段重疊

我的第一個方法是使用:

  1. disjoint但它並沒有因爲接觸工作/對接不是沒有考慮脫節

  2. overlaps但它沒有工作,因爲觸摸/對接是視爲重疊

我嘗試了其他幾種組合(u例如唱歌within),我找不到一個簡單的方法。簡單來說,我的意思是:在不實現計算幾何算法的情況下使用幾個增強幾何算法。

我認爲解決的辦法是在戰略的地方......

我想我可以重新定義問題:如何找到對接環(多邊形)? (注:我可以從邊緣創建一個簡併環)。

這是我想要的圖。紅段應返回OVERLAP,藍色無OVERLAP

enter image description here

系統:Boost_1.54,CentOS的-5,GCC-4.7.2

+0

Boost.Geometry實現由DE9IM(http://en.wikipedia.org/wiki/DE-9IM)定義的空間關係。我不確定你面臨的問題到底是什麼。您需要的是十字架空間關係嗎?我很困惑,因爲overlapps()不適用於Segment(1d)和Ring(2d),觸摸Polygons/Rings可以使用touches()找到。 –

+0

@AdamWulkiewicz:我解決了一些問題,例如使用'touches()'這兩個環都需要它們的點具有相同的順序,即CW或CCW,但問題是我想要查找** 2d段**是否觸及** 2d-環**和'touches()'不適用於分段環。我試圖用邊緣點創建一個退化環:(edge.first,edge.second,edge.first),但它並不總是工作。 'overlapps()'不合適,因爲我只想觸摸。 –

回答

1

是,目前(1.55)觸摸()不爲段/振鈴實現。我們計劃在1.56版本中發佈更多變體,可能不是Segment/Ring,但您應該可以使用Linestring/Ring。你可以使用庫的開發版本進行測試:

http://github.com/boostorg/geometry/tree/develop

此外,在觸摸與CCW多邊形的問題()被固定在發展分支。