矩形裁剪多邊形算法

多邊形是由若干線段圍成的封閉圖形,使用長方形裁剪多邊形得到的結果應該仍然是一個多邊形,一個封閉的圖形

之前我們學習了Liang-Barsky直線裁剪算法,但是如果僅重複的利用直線段的裁剪方法進行裁剪,很可能無法得到期望的圖形結果,無法得到一個封閉的多邊形

採用逐邊裁剪算法:
依次使用窗口的四條邊框直線對多邊形進行分佈裁剪,先用一條邊框直線對整個多邊形進行裁剪,得到一個或者若干個新的多邊形,再用第二條邊框直線對新產生的多邊形進行裁剪…依次類推知道四條邊框直線都裁剪完,整個多邊形的裁剪過程結束

步驟:

  • 把待裁剪多邊形的各個頂點按照一定的方向有次序的組成有序的頂點序列(p1,p2,pn),相繼連接相鄰兩個頂點(p1p2,p2p3,p3p4,pnp1)即爲組成多邊形的n條邊。該頂點序列就是待處理的輸入量
  • 對輸入的頂點序列進行處理,結果是產生一組新的頂點序列,然後輸出該組新的頂點序列,該新的頂點序列表示了由M條邊組成的新的多邊形
  • 把輸入的頂點序列作爲新的輸入量,再次輸入進行處理,這樣處理三次

如何處理:

  • 對於給定的頂點序列,依次檢驗頂點序列中每個頂點pi (i=1,2,n) ,處於裁剪邊框可見側的頂點被放入新的頂點序列中,處於裁剪邊框不可見側的頂點被刪除
  • 還要檢測pi和他的前一個頂點pi-1點是否處於裁剪邊框的同側(認爲p1的前一個頂點是pn),如果不再同一側的話,要求出裁剪邊框與直線段pipi-1的交點並把該交點作爲新的頂點列入到新頂點序列中輸出
  • 我們設多邊形的任意一條邊起點爲s,終點爲e。給定的矩形有可見側和不可見側
    在這裏插入圖片描述
  • 則線段SE和裁剪線有四種位置關係:
    端點SE都在不可見側,則沒有輸出;SE都在可見側,輸出端點E;端點S在可見側,端點E在不可見側,則輸出線段SE與裁剪線的交點C;端點S在不可見側,端點E在可見側,則輸出線段SE與裁剪線的交點C和端點E
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章