裁剪算法——Cohen-Sutherland算法


光柵圖形學算法——裁剪算法

一、直線裁剪算法

1、裁剪:計算機內部存儲的圖形往往比較大,而屏幕顯示的只是圖形的一部分,因此需要確定圖形哪些部分落在顯示區之內,哪些落在顯示區之外,這個選擇的過程就稱為裁剪。

1.1點的裁剪——>此方法太費時,效率比較低,一般不可取。

對於任意一點P(x,y)若滿足下列不等式,則點P在矩形窗口內


1.2直線段的裁剪——>復雜圖形裁剪的基礎

要裁剪一條直線段,首先要判斷此直線的位置:
1)它是否完全落在裁剪窗口內?
2)它是否完全在窗口外?
3)如果不滿足以上兩個條件,則計算它與一個或多個裁剪邊界的交點。


二、Cohen-Sutherland算法(編碼裁剪算法)

首先對直線段的端點進行編碼。

基本思想:對每條直線段分三種情況處理:
1)若點p1和p2完全在裁剪窗口內——>“簡取”之(保留這條直線)


2)若點p1(x1,y1),p2(x2,y2)均在窗口外,且滿足下列四個條件之一:——>“簡棄”之(不要了)


3)如果直線段既不滿足“簡取”的條件,也不滿足“簡棄”的條件?
——>需要對直線段按交點進行分段,分段后判斷直線是“簡取”還是“簡棄”。



裁剪一條線段時,先求出端點p1和p2的編碼code1和code2,然后進行二進制“或”運算和“與”運算



【若這兩個條件均不成立,則需要求出直線段與窗口邊界的交點在交點處把線段一分為二。】

如裁剪如下圖所示的直線段P1P2:

首先對P1P2進行編碼

令直線段與窗口左邊界的交點為P3,
則可知P1P3必在窗口外,可以簡棄之。

再令直線段與窗口下邊界的交點為P4,


剩下的直線段(P3P4)再進行進一步判斷,code1|code2=0,全在窗口中,簡取之
【點P在窗口邊界也屬於在窗口內】

【存在的問題】


如圖中線段全部在窗口外部,但是對兩段端點進行或/與運算時,需要再次取交點進行運算,最壞情況下,被裁剪線段與窗口4條邊計算交點,然后所得的裁剪結果卻可能是全部舍棄。

【小結】Cohen-Sutherland算法比較適合兩種情況:
    1、大部分線段完全可見;
    2、大部分線段完全不可見。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM