Cohen-SutherLand算法(編碼算法)


轉自:http://my.oschina.net/liqiong/blog/4921

Cohen-SutherLand算法(編碼算法)

 

基本思想:對於每條線段P1P2,分為三種情況處理:

(1)若P1P2完全在窗口內,則顯示該線段,簡稱“取”之;

(2)若P1P2明顯在窗口外,則丟棄該線段,簡稱“棄”之;

(3)若線段既不滿足“取”的條件,也不滿足“棄”的條件,則把線段分為兩段。其中一段完全在窗口外,可棄之。然后對另一段重復上述處理。

為了使計算機能夠快速的判斷一條線段與窗口屬於何種關系,采用如下編碼方法:把窗口的邊界延長成直線,窗口平台就分成9個分區,每個區設定一個4位的編碼與之對應。

平面上每一條直線的端點根據其所在的區域都可定義出兩個編碼。

編碼(以二進制形式自右向左給出)的意義如下:

(1)第0位:如果端點在窗口左邊界左側,則為1,否則為0;

(2)第1位:如果端點在窗口右邊界右側,則為1,否則為0;

(3)第2位:如果端點在窗口下邊界下側,則為1,否則為0;

(4)第3位:如果端點在窗口上邊界上側,則為1,否則為0。

 

 

裁剪一條線段時,先求出端點p1和p2的編碼code1和code2:

(1)如果code1和code2均為0,則說明P1和P2均在窗口內,那么線段全部位於窗口內部,應取之。(c)

(2)如果code1和code2經過按位與運算后的結果code1&code2不等於0,說明P1和P2同時在窗口的上方、下方、左方或右方,那么線段全部位於窗口的外部,應棄之。(e,d)

(3)如果上述兩種條件均不成立,則可按如下方法處理:求出線段與窗口邊界的交點,在交點處把線段一分為二,其中必有一段完全在窗口外,可以棄之。再對另一段重復進行上述處理,直到該線段完全被舍棄或者找到位於窗口內的一段線段為止。(a,b,d’)

        

 

此方法直觀而方便,速度也較快。但是:

(1)由於采用按位與運算,對程序的實現有特殊的要求;

(2)全部舍棄的判斷只適合於那些僅在窗口同一側(后左、或右、或上、或下)的線段。

 

 

算法的特點:

(1)特點:用編碼方法可快速判斷線段--完全可見和顯然不可見。

 (2)特別適用二種場合:

大窗口場合;

          窗口特別小的場合(如:光標拾取圖形時,光標看作小的裁剪窗口)

     

     例:根據區域編碼裁剪算法對P1P2(P1[80,75],P2[-40,0])進行裁剪,以圖解形式說明裁剪的過程(已知:XL=0,XR=100,YB=0,YT=50)。

     

     

     


免責聲明!

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



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