掃描轉換算法重要的意義是提出了圖形學里兩個重要的思想:
(1)掃描線;
(2)增量思想。
已經知道X-掃描線算法效率低是因為求交麻煩,那求教點的時候能否也采用增量思想,每條掃描線的y值都知道,關鍵是求x值。
可以從三個方面改進:
1、在處理一條掃描西線時,僅對與它相交的多邊形的邊(有效邊)進行求交運算。
2、考慮掃描線的連貫性,也就是當前掃描線與各邊交點順序與下一條掃描線邊與各邊的交點順序很可能相同或非常相似。
3、考慮多邊形的連貫性,即當某條邊與掃描線相交時它很可能與下一條掃描線也相交。
(2)改進的X-掃描線算法:【無法實現對未知邊界的區域填充】
【增量思想/連貫性思想/構建一套特殊的數據結構】
為了避免求交運算——>需要特殊的數據結構:
a)活性邊表(AET):把當前掃描線相交的邊稱為活性邊,並把它們按與掃描線交點x坐標遞增的順序存放在一個鏈表中。
b)節點內容:x:當前掃描線與邊的交點坐標
x2-x1:從當前掃描線到下一條掃描線間x的增量——>x2-x1=1/k
ymax:該邊所交的最高掃描線的坐標值
next:指向下一條邊的指針
C)新邊表(NET):為了方便活性邊表的建立與更新,用來存放多邊形的邊的信息。
1.構造一個縱向鏈表,長度為多邊形所占有的最大掃描線數,鏈表的每個結點稱為吊桶;
2.新邊表(NET)掛在與【該邊低端y值相同】的掃描線桶中;
ymax:該邊的最大值;
xmin:該邊較低點的x坐標值xmin;
1/k:該邊的斜率
ymax:指向下一條具有相同較低端y坐標的邊的指針
d)每做一次新的掃描時,要對已有的邊進行三個處理:
1.是否被去除掉;
2.若不被去除掉,就要對它的數據進行更新,x=x+1/k;
3.是否有新的邊進來,新的邊在NET里,可以插入排序插進來。
多邊形掃描轉換算法:
【小結】
為提高算法效率:
(1)增量的思想;
(2)連貫性思想;
(3)構建一套特殊的數據結構。
【缺點】這里的區間端點通過計算掃描線與多邊形邊界的交點獲得,所以待填充區域的邊界線必須預先知道,因此它的缺點所在是無法實現對未知邊界的區域填充。