多邊形有兩種重要的表示方法:頂點表示和點陣表示
頂點表示是用多邊形的頂點序列來表示多邊形。這種表示直觀、幾何意義強、佔記憶體少,易於進行幾何變換。
但由於它沒有明確指出哪些象素在多邊形內,故不能直接用於面著色
點陣表示是用位於多邊形內的象素集合來刻畫多邊形。這種表示丟失了許多幾何資訊(如邊界、頂點等),但它卻是光柵顯示系統顯示時所需的表示形式。
光柵圖形的乙個基本問題是把多邊形的頂點表示轉換為點陣表示。這種轉換稱為多邊形的掃瞄轉換
x-掃瞄線演算法填充多邊形的基本思想是按掃瞄線順序,計算掃瞄線與多邊形的相交區間,再用要求的顏色顯示這些區間的畫素,即完成填充工作
演算法的核心是按x遞增順序排列交點的x座標序列。由此,可得到x-掃瞄線演算法步驟如下:
(1)確定多邊形所占有的最大掃瞄線數,得到多邊形頂點的最小和最大y值(ymin和ymax)
(2)從y = ymin到y = ymax,每次用一條掃瞄線進行填充
(3) 對一條掃瞄線填充的過 程可分為四個步驟:
a、求交:計算掃瞄線與多邊形各邊的交點
b、排序:把所有交點按遞增順序進行排序
c、交點配對:第乙個與第二個,第三個與第四個
d、區間填色:把這些相交區間內的畫素置成不同於背景色的填充色
(1)若共享頂點的兩條邊分別落在掃瞄線的兩邊,交點只算乙個
(2)若共享頂點的兩條邊在掃瞄線的同一邊,這時交點作為零個或兩個
檢查共享頂點的兩條邊的另外兩個端點的y值,按這兩 個y值中大於交點y值的個數來決定交點數
為了計算每條掃瞄線與多邊形各邊的交點,最簡單的方法是把多邊形的所有邊放在乙個表中。在處理每條掃瞄線時,按順序從表中取出所有的邊,分別與掃瞄線求交
這個演算法效率低,為什麼?
關鍵問題是求交!
而求交是很可怕的,求交的計算量是非常大的
掃瞄線演算法
給出幾個矩形對角端點座標,求這些矩形整體覆蓋的面積。基本思想如下圖 先離散化。掃瞄線 是一根想象中的虛線,從左往右掃瞄,遇到 矩形 則成為 事件 遇到 起始邊 則update相應區間的 厚度 或者 覆蓋次數 covercnt 1。遇到 結束邊 則update相應區間的 厚度 covercnt 1。用...
區域填充之掃瞄線演算法
區域的填充可以根據區域的填充,採用不同的填充演算法,而其中有掃瞄線類演算法和種子填充演算法。這裡,先介紹掃瞄線類演算法之有序邊表的掃瞄線演算法。其他什麼種子填充 邊界標誌演算法 4連通區域的遞迴演算法 8連通區域的遞迴演算法 掃瞄線種子填充演算法比較簡單。其實有序邊表其實領會了也好理解,關鍵是將思想...
掃瞄線 演算法學習筆記
一般如果是從左往右掃的話,首先用結構體表示圖形 長方形或正方形 的左右兩邊 struct ddu n 2 f 表示該邊時入邊還是出邊,入邊為 1 出邊表示 1 x 表示該邊的x座標,y1 表示該邊的上邊y座標,y2 表示該邊的下邊y座標 如圖 這個還沒完,可以發現y的取值範圍為1 1e9,因為我們線...