如果按線段的方法裁剪,得到的是一系列線段。
而實際上,應該得到的是下圖所示的有邊界的區域:
多邊形裁剪演算法的輸出應該是裁剪後的多邊 形邊界的頂點序列!
需要構造能產生乙個或多個封閉區域的多邊 形裁剪演算法
該演算法的基本思想是將多邊形邊界作為乙個整體,
每次用視窗的一條邊對要裁剪的多邊形和中間結果多邊形進行裁剪,
體現一種分而治之的思想
把平面分為兩個區域:
包含有視窗區域的乙個域稱為可見側;
不包含視窗區域的域為不可見側
裁剪得到的結果多邊形的頂點有兩部分組成:
(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
endend
end利用sutherland-hodgeman裁剪演算法對凸多邊形進行裁剪可以 獲得正確的裁剪結果,但是凹多邊形不行。
多邊形裁剪問題
案例 用乙個矩形框裁剪乙個多邊形。思路 將問題降到邊切割邊的問題。霍格曼演算法 h 遍歷 裁剪多邊形的每一條邊,每一條邊向兩邊無限延長,依次分割多邊形。遍歷被裁剪多邊形的每條邊 2條邊的位置關係比較明確。當被裁剪多邊形一條邊 起點p,終點q 相對於視窗某條邊界及其延長線進行剪裁時,共有四種情況 1 ...
多邊形裁剪二 Weiler Atherton演算法
weiler atherton 任意多邊形裁剪 sutherland hodgeman 演算法解決了裁剪視窗為凸多邊形視窗的問題,但一些應用需要涉及任意多邊形視窗 含凹多邊形視窗 的裁剪。weiler atherton 多邊形裁剪演算法正是滿足這種要求的演算法。一 weiler atherton 任...
Weiler Atherton多邊形裁剪演算法
這是乙個通用的多邊形裁剪演算法,既可以裁剪凸多邊形也可以裁剪凹多邊。通過下圖來描述演算法的執行過程 圖中dcba為裁剪視窗,dcba為要裁剪的多邊形。在演算法執行之前將多邊形和裁剪視窗的交點分別加入他們的頂點序列。即圖中的123456。則多邊形序列為 a,6,5,d,4,3,c,2,b,1 裁剪視窗...