有效邊表填充算法


基本思想:

用水平掃描線從上到下(或從下到上)掃描由多條首尾相連的線段構成的多邊形,每根掃描線

與多邊形的某些邊產生一系列的交點。將這些交點按照x坐標排序,將排序后的點兩兩配對,作

為線段的兩個端點,以所填的顏色畫水平直線。

步驟

1.求交,計算掃描線與多邊形的交點。

2.交點排序,對第1步得到的交點按照x從小到大排序

3.顏色填充,對排序后的交點兩兩組成一個水平線段,以畫線段的方式進行顏色填充。

4.完成多邊形掃描,就結束算法,否則,繼續1

 有效邊

多邊形與當前掃描線相交的邊成為有效邊(active edge)。在處理一條掃描線時僅對有效邊進行

求交運算,避免與多邊形所有邊求交,提高效率。

x ymax 1/k next

桶表與邊表

有效邊給出了掃描線與有效邊交點的計算方法,但沒有給出新邊出現的位置坐標。為了確定在

哪條掃描線上加入了新邊,就需要構造一個邊表(edge table ET),用以存放掃描線上多邊形各

條邊出現的信息。水平邊本身就是掃描線在建立邊表時可以不予考慮。

桶表與邊表的表示法

桶表是按照掃描線順序管理邊出現的一個數據結構。首先,構造一個縱向掃描線鏈表,鏈表的

長度為多邊形所占有的最大掃描線數,鏈表的每個節點稱為桶(bucket),對應多邊形覆蓋的每一

條掃描線。

將每條邊的信息鏈加入該邊最小y坐標對應的桶處。

對每一條掃描線,如果新增多條邊,按照x|ymin 坐標遞增的順序存放在一個鏈表中,若x|ymin 相等,

則按照1/k遞增,就形成邊表。

x|ymin ymax 1/k

next


免責聲明!

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



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