2010-10-07 216 views
2

我有搜索和研究互聯網最後幾天找到適合我的問題的方法。凹面多邊形線條裁剪不退化邊緣

問題:

剪輯針對無限線凹多邊形沒有方向(事實上與一平面的多邊形在3D但問題是類似我覺得)。目前我使用Sutherland-Hodgman,但生成的多邊形有時包含由退化邊創建的零面積零件,它也不支持包含孔的多邊形。

我發現可以解決我的問題的最好的算法是Weiler-Atherton算法,但是它是針對具有順時針邊緣的多邊形進行裁剪,並且我擁有的是一個無限長線(在3D平面中)缺少方向信息。

問:

是否有一個算法來剪輯適合我的需要凹多邊形或做任何人對如何修改維勒 - 阿瑟頓算法建議,對於這種情況的工作?有網頁表明它可以推廣到支持更多的案例,但我無法弄清楚。

//問候 英賢

回答

1

你可以使用一個多邊形推剪*通過轉換行成一個裁剪多邊形來解決這個問題。假設你沒有在近水平面上剪切,只要確保剪切多邊形的臨界(裁剪)邊緣比主題多邊形的垂直尺寸稍大(即邊緣在目標多邊形的上方和下方延伸)。如果在近水平面上剪裁,確保關鍵邊緣比主體稍寬。

*如帆船 - http://sourceforge.net/projects/polyclipping/

披露:我剪的作者,所以有一個個人偏見的潛力。

+0

。是的,我試圖找出一個好方法來處理這個問題。我的多邊形在三維空間中很難決定如何將線條轉換爲合適的多邊形,因爲主題多邊形可以旋轉怪異,這使得很難決定從線條(從平面/平面相交處)到哪個方向展開多邊形。 – Eiken 2010-10-08 12:07:22

+0

我認爲你可以在2D空間中定義剪切線。如果其絕對斜率小於1(即接近水平),則剪切線段(和剪切多邊形的一條邊)需要延伸到主題多邊形的左右範圍之外。其他邊緣可以軸對齊,只要確保水平邊緣高於(或低於)主題多邊形的範圍即可。同樣,如果剪切線的絕對斜率大於1,則使用相同的邏輯,但將其旋轉90度。 – 2010-10-08 17:04:12

+0

是的,這將基本上與我在圖形寶石V中發現的算法基本相同的理論,除了它更加簡化,正是我想要做的,我可以跳過表示我的飛機作爲線的步驟。還是謝謝你的回答。 Stackoverflow是一個了不起的資源。 – Eiken 2010-10-09 16:16:59

3

在Graphic Gems V中找到了合適的算法來解決我的問題。如果有人有同樣的問題,這是參考:

格拉斯納,A '' 裁剪凹多邊形',在圖形寶石V,A. Paeth編,學術出版社,劍橋,1995年