Cohen SutherLand演算法 編碼演算法

2021-09-06 20:27:41 字數 1750 閱讀 4470

**:

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)。

Boosting演算法和Adaboost演算法的關係

1990年,schapire就首先構造出一種多項式級的演算法,將弱學習演算法提公升為強學習演算法,就是最初的boosting演算法。boosting意思為提公升 加強,現在一般指將弱學習提公升為強學習的一類演算法。級聯分類器就是將多個強分類器連線在一起進行操作,每乙個強分類器都由若干個弱分類器加權組...

apriori演算法實現 FP Growth演算法簡介

由於apriori演算法在挖掘頻繁模式時,需要多次掃瞄資料庫,並且會產生大量的候選項集。所以apriori演算法的時間複雜度和空間複雜度相對都很高,演算法執行效率不高。而fp growth演算法在進行頻繁模式挖掘時,只需要對資料庫進行兩次掃瞄,並且不會產生候選項集。它的效率相比於apriori演算法...

for each演算法和transform演算法區別

對於for each 演算法和transform 演算法更多基礎的內容請參考以下兩篇http 文章 for each 演算法 點選開啟鏈結 transform 演算法 點選開啟鏈結 首先,for each 演算法和transform 演算法都是屬於變動性演算法 modifying algorithm...