直線裁剪算法


直線裁剪算法

一、

1、裁剪:確定圖形哪些部分落在顯示區之內,哪些落在顯示區外。這個選擇的過程就稱為裁剪。

2、直線段的裁剪:Cohen-Suther land、中點分割法和Liang-Barsky裁剪算法

二、Cohen-Suther land算法

又稱編碼裁剪算法,算法的基本思想是對每條直線分三種情況處理:

1>若端點完全在裁剪窗口內----“簡取”之

 

2>若端點完全在裁剪窗口外,且滿足下列四個條件之一----“簡棄”之

 

3>既不滿足簡取,也不滿足簡棄:對直線段按交點進行分段,分段后判斷直線是“簡取”還是“簡棄”

每條線段的端點都賦以四位二進制碼D3D2D1D0,編碼規則如下:左右下上)

 

例如:

 

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

(1)code1|code2=0,對直線段簡取

(2)code1&code2不等於0,對直線段簡棄

(3)若上述兩條件都不成立,則需要求出直線段與窗口邊界的交點,並在交點處把直線段一分為二

3、存在問題:

一條完全在窗口外的直線,進行與運算=0,還需求交點,然后所得結果還是全部舍棄三、

三、中點分割算法

1、核心思想:通過二分逼近來確定直線段與窗口的交點

2、注意:

1>若中點不在窗口內,則把中點和離窗口邊界最遠點構成的線段丟掉,線段上的另一點和該中點再構成線段求其中點

2>若中點在窗口內,則以中點和最遠點構成線段,求其中點,直到中點與窗口邊界的坐標值在規定的誤差范圍內

3、問題:中點分割算法會不會無限循環下去?

不會。因為屏幕像素是有限的,一般計算次數不會太多,而且允許在誤差范圍內

四、Liang-Barsky裁剪算法

1、主要思想:用參數方程表示一條直線段(0<=U<=1)

X=X1+U*(X2-X1)=X1+U*X

Y=Y1+U*(Y2-Y1)=Y1+U*Y

2、把直線看成是一條有方向的線段,把窗口的四條邊及其延長線分成兩類:入邊和出邊

入邊:左邊界和下邊界

出邊:右邊界和上邊界

 

如何求出起點和終點的坐標?(即起點和終點的參數值u

 

判斷線段某一部分是否在窗口內,可以簡化為判斷直線上一個點是否在窗口內的問題,窗口內的P點滿足什么條件?

 

3、舉例:

 

3、Liang-Barsky算法小結

1>直線方程參數化

2>直線段是有方向的

3>把窗口的四條邊分成入邊和出邊

五、Cohen-Suther land算法和Liang-Barsky算法比較

1、Cohen-Suther land算法的核心思想是編碼,窗口和延長線把空間分成了9個區域

2、線段要么大部分在窗口外,要么大部分在窗口內,使用Cohen-Suther land效果好

3、一般情況下(線段貫穿窗口),優先使用Liang-Barsky算法

4、兩者均只能應用於矩形窗口


免責聲明!

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



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