2015-04-30 56 views
0

enter image description here套索選擇執行

我想實現像在2D.Blue AutoCAD的套索選擇是充分融入和綠色是局部(例如:如果選擇線的一部分)。我正在尋找一個足夠好的算法來實現這個目標。套索選擇是任意多邊形(可以是凹或凸或自相交)。
首先,它似乎必須將多邊形轉換爲凸或三角形。但是.net我發現這個LibTessDotNet
三角測量方法的問題是我不知道如何知道例如一條線是否完全包含,因爲部分線可以在任何多邊形。
其他的想法是使用像Clipper這樣的庫,並通過布爾運算確定交集。對於完整我會做區別(應該是空的)或交叉部分。

有沒有更好的工作方法?

回答

1

個人而言,我已實施套索選擇用於使用的算法「在多邊形點」曲線(如直線,圓,部分圓形,橢圓形,...等)如下:

1)對於給定的曲線,從中採樣一些點。
2)對於每個採樣點,檢查點是否在Lasso路徑形成的多邊形內。如果Lasso路徑中有兩個以上的點,則該曲線部分封閉。如果所有采樣點均在Lasso路徑內,則此曲線完全封閉。

您可以從互聯網上獲得「點多邊形」算法和源代碼,如鏈接(http://alienryderflex.com/polygon/)。

如果您有許多曲線並開始擔心性能,那麼您可以檢查曲線的邊界框是否與Lasso路徑的邊界框相交。如果不是,那麼您可以在搜索中跳過這條曲線。但是這樣做需要您事先爲每條曲線計算一個邊界框,並且您需要確保對曲線進行任何可能的更改都是最新的。

+0

這會工作,但我不知道它有多精確。即使您有2-3像素的間隙,但Autocad似乎不能匹配完整的機箱,但指向多邊形可能會輕易錯過它。另外我沒有得到如何檢查邊界框,因爲矩形的4個點可能不與套索相交,但是套索會與曲線相交。 – GorillaApe

+0

我的原始文章關於如何使用邊界框來加速搜索是不正確的。我混淆了一個不同但相似的場景。該帖子已被編輯。 – fang