(13)裁剪之多邊形裁剪

多邊形的裁剪特色
 多邊形是由若干直線段圍成的封閉圖形。裁剪多邊形所獲得的結果,應該還是一個多邊形,便是一個封閉圖形。

 多邊形和窗口之間可能存在的位置關係以下:  算法



逐邊裁剪算法

基本思想:
該算法依次用窗口的四條邊框直線對多邊形進行分步裁剪。先用一條邊框直線對整個多邊形進行裁剪,獲得一個或若干個新的多邊形;再用第二條邊框直線對這些新產生的多邊形進行裁剪。依次類推,直到用四條邊框直線都裁剪完,整個多邊形的裁剪過程結束。


多邊形逐邊裁剪算法步驟: 
①把待裁剪多邊形的各頂點按必定方向有次序地組成頂點序列(P1,P2,…,Pn),相繼鏈接相鄰兩頂點(P1P2,P2P3,…,Pn-1Pn,PnP1),即組成多邊形的n條邊。該頂點序列是待處理的輸入量。
spa

② 處理輸入的頂點序列,結果是產生一組新的頂點序列,而後輸出該組新的頂點序列(如Q1,Q2,…,Qm)。該新的頂點序列表示了由m條邊組成的新的多邊形。
blog

③ 把輸出的頂點序列做爲新的輸入量,再次輸入到算法中的第②步,如此重複三次。 
方法


具體處理方法:
 算法第②步處理頂點序列時,依次檢驗頂點序列中的每一個頂點Pi(i =1,…,n),處於裁剪邊框可見側的頂點被列入新的頂點序列中輸出,處於裁剪邊框不可見側的頂點被刪除。
im

還要檢驗Pi 點和它前一個頂點Pi–1 點是否處於裁剪邊框的同側(對於P1點,其前一個頂點爲Pn點)。若不在同一側,則求出裁剪邊框與直線段Pi Pi–1 的交點,並把該交點做爲新的頂點列入到新頂點序列中輸出。 
d3


窗口邊框及其延長線構成的裁剪線把平面分紅兩部分:一部分包含窗口,稱爲可見一側;另外一部分不包含窗口,稱爲不可見一側。
db



設多邊形的任意一條邊的端點爲S(起點)、E(終點),線段SE與裁剪線的位置關係有四種狀況:
(1)端點S和E都在不可見側,則無任何輸出;
(2)端點S和E都在可見側,則輸出端點E;
img


(3)端點S在可見側,端點E在不可見側,則輸出線段SE與裁剪線的交點I;
(4)端點S在不可見側,端點E在可見側,則輸出線段SE與裁剪線的交點I和端點E。
co