若是按線段的方法裁剪,獲得的是一系列線段。算法
而實際上,應該獲得的是下圖所示的有邊界的區域:blog
多邊形裁剪算法的輸出應該是裁剪後的多邊 形邊界的頂點序列!bfc
須要構造能產生一個或多個封閉區域的多邊 形裁剪算法方法
該算法的基本思想是將多邊形邊界做爲一個總體,im
每次用窗口的一條邊對要裁剪的多邊形和中間結果多邊形進行裁剪,d3
體現一種分而治之的思想db
把平面分爲兩個區域:img
包含有窗口區域的一個域稱爲可見側;while
不包含窗口區域的域爲不可見側co
裁剪獲得的結果多邊形的頂點有兩部分組成:
(1)落在可見一側的原多邊形頂點
(2)多邊形的邊與裁剪窗口邊界的交點
根據多邊形每一邊與窗口邊所造成的位置關係,沿着多邊形 依次處理頂點會遇到四種狀況:
(1)第一點S在不可見 側面,而第二點P在 可見側
交點I與點 P均被加入到輸 出頂點表中。
(2)是S和P都在可見側
則P被加入到輸出頂點表中
(3)S在可見側,而P在不可見側
則交點I被加入到輸出頂點表中
(4)若是S和P都在不可見側
輸出頂點表中不增長任何頂點
在窗口的一條裁剪邊界處理完全部頂 點後,其輸出頂點表將用窗口的下一 條邊界繼續裁剪
while對於每個窗口邊或面 do
begin
if P1 在窗口邊的可見一側 then 輸出P1
for i=1 to n do
begin
if P1 在窗口邊的可見一側 then
if P1+1 在窗口邊的可見一側 then 輸出 P1+1
else 計算交點並輸出交點
else if Pi+1 在窗口可見一側,then 計算交點
並輸出交點,同時輸出Pi+1
end
end
end
利用Sutherland-Hodgeman裁剪算法對凸多邊形進行裁剪能夠 得到正確的裁剪結果,可是凹多邊形不行。