1. 程式人生 > >Cohen-Sutherland演算法概述

Cohen-Sutherland演算法概述

思想
通過對於任一端點(x,y),根據其座標所在的區域,賦予一個4位的二進位制碼,判斷圖形元素是否落在裁剪視窗之內並通過求交運算找出其位於內部的部分。

編碼方式
注意:l為left,r為right,b為bottom,t為top

(1)若x小於wxl,D0=1,否則D0=0
(2)若x大於wxr,D1=1,否則D1=0
(3)若y小於wyb,D2=1,否則D2=0
(4)若y大於wyt,D3=1,否則D3=0
在這裡插入圖片描述

裁剪一條線段時,先求出端點p1和p2的編碼code1和code2:
(1)如果code1和code2均為0,則說明P1和P2均在視窗內,那麼線段全部位於視窗內部,應取之。
(2)如果code1和code2經過按位與運算後的結果code1&code2不等於0,說明P1和P2同時在視窗的上方、下方、左方或右方,那麼線段全部位於視窗的外部,應棄之。
(3)當(1)和(2)不滿足時,確保p1在視窗外部:若p1在視窗內,則交換p1和p2的座標值和編碼。
(4)求出直線段與視窗邊界的交點,並用該交點的座標值替換p1的座標值。也即在交點s處把線段一分為二。考慮到p1是視窗外的一點,因此可以去掉p1s。轉(2)。
(5)用直線掃描轉換演算法畫出當前的直線段p1p2。
(6)演算法結束。

演算法的流程圖
在這裡插入圖片描述

缺陷
(1)但是是對於在裁剪視窗直線內的線段,求交過程複雜,並且包含加、乘法、除法、浮點運算等,不利於硬體實現。
(2)由於採用編碼思想,涉及到按位與運算,對程式的實現有特殊的要求;
(3)全部捨棄的判斷只適合於那些僅在視窗同一側(後左、或右、或上、或下)的線段。對於在裁剪視窗直線內的線段此演算法不是很方便。

更多內容訪問omegaxyz.com
網站所有程式碼採用Apache 2.0授權
網站文章採用知識共享許可協議BY-NC-SA4.0授權
© 2018 • OmegaXYZ-版權所有 轉載請註明出處