錯覺:直線段裁剪的組合?
新的問題:
-
邊界不再封閉,需要用窗口邊界的恰當部分來封閉它,如何確定其邊界?
-
一個凹多邊形可能被裁剪成幾個小的多邊形,如何確定這些小多邊形的邊界?
Sutherland-Hodgman算法
Sutherland-Hodgman算法也叫逐邊裁剪法,該算法是薩瑟蘭德(I.E.Sutherland)和霍德曼(Hodgman)在1974年提出的。這種算法采用了分割處理、逐邊裁剪的方法。
1、算法介紹
-
分割處理策略:
該算法的基本思想是將多邊形邊界作為一個整體,每次用窗口的一條邊對要裁剪的多邊形和中間結果多邊形進行裁剪,體現一種分而治之的思想。
-
流水線過程(左上右下):前邊的結果是后邊的輸入
2、算法思想
-
基本思想是一次用窗口的一條邊裁剪多邊形。
-
考慮窗口的一條邊以及延長線構成的裁剪線該線把平面分成兩個部分:可見一側和不可見一側
-
多邊形的各條邊的兩端點S、P。它們與裁剪線的位置關系只有四種
- 情況(1):起點終點都在可見一側,僅輸出頂點P;
- 如果都輸出,會出現多邊形的點重復
- 情況(2):起點終點都不在可見一側,輸出0個頂點;
- 情況(3):起點在可見一側,終點在不可見一側,輸出線段SP與裁剪線的交點I;
- 情況(4):起點在不可見一側,終點在可見一側,輸出線段SP與裁剪線的交點I和終點P
- 情況(1):起點終點都在可見一側,僅輸出頂點P;
3、算法框圖
- 上述算法僅用一條裁剪邊對多邊形進行裁剪,得到一個頂點序列,作為下一條裁剪邊處理過程的輸入。
- 對於每一條裁剪邊,算法框圖同上,只是判斷點在窗口哪一側以及求線段SP與裁剪邊的交點算法應隨之改變。
4、小結
- 對凸多邊形應用本算法可以得到正確的結果,但是對凹多邊形的裁剪將如圖所示顯示出一條多余的直線。這種情況在裁剪后的多邊形有兩個或者多個分離部分的時候出現。因為只有一個輸出頂點表,所以表中最后一個頂點總是連着第一個頂點。
- 解決這個問題有多種方法,一是把凹多邊形分割成若干個凸多邊形,然后分別處理各個凸多邊形。二是修改本算法,沿着任何一個裁剪窗口邊檢查頂點表,正確的連接頂點對。再有就是Weiler-Atherton算法。