(2)新边表 为了方便活性边表的建立与更新,为 每一条扫描线建立一个新边表,存放在该 扫描线上第一次出现的边。也就是说 某边的较低端点为ymin,则该边就放在扫 描线ymin的新边表中。这样,当我们按扫 描线号从小到大顺序处理扫描线时,该边 在该扫描线第一次出现。新边表的每个结 存放对应边的初始信息。如该扫描线与 该边的初始交点ⅹ(即较低端点的x值)、ⅹ 的增量△X以及该边的最大y值max。新边 表的边结点不必排序。图5.1.5是各扫描线 的新边表
(2)新边表 为了方便活性边表的建立与更新,为 每一条扫描线建立一个新边表,存放在该 扫描线上第一次出现的边。也就是说,若 某边的较低端点为ymin,则该边就放在扫 描线ymin的新边表中。这样,当我们按扫 描线号从小到大顺序处理扫描线时,该边 在该扫描线第一次出现。新边表的每个结 点存放对应边的初始信息。如该扫描线与 该边的初始交点x(即较低端点的x值)、x 的增量△x以及该边的最大y值ymax。新边 表的边结点不必排序。图5.1.5是各扫描线 的新边表
A
ΛΛΛΛ 5 2 8 5 -1.5 7 Λ
3)多边形区域填充算法 活性边表的基础上,进行交点配对和区间填充是很 容易的事。只要设 布尔量b,规定在多边形内时 取真值,在多边形外时,b取假。令指针从活性边表中第 个结点(交点)到最后一个结点遍 每 结点,把b取反 若b为真,则把从当前结点的x值开 到下一结点的x值结束的左闭右开区间用多边形填充色 进行填充。这样就可以完成多边形内的像素取多边形色 多边形外的像素取背景色。 多边形区域填充算法描述如下 Polygonfill(polydef, color) int color 多边形定义 polytef; for(各条扫描线i 初始化新边表表头指针NET[i];
(3)多边形区域填充算法 在活性边表的基础上,进行交点配对和区间填充是很 容易的事。只要设置一个布尔量b,规定在多边形内时,b 取真值,在多边形外时,b取假。令指针从活性边表中第 一个结点(交点)到最后一个结点遍历一次,每访问一个 结点,把b取反一次。若b为真,则把从当前结点的x值开 始到下一结点的x值结束的左闭右开区间用多边形填充色 进行填充。这样就可以完成多边形内的像素取多边形色, 多边形外的像素取背景色。 多边形区域填充算法描述如下: Polygonfill(polydef,color) int color; 多边形定义 polydef; { for (各条扫描线 i) { 初始化新边表表头指针NET[i];
把ymin=的边放进边表NET[ y=最低扫描线号 初始化活性边表AET为空; for(各条扫描线i 把新边表NET[中的边结点用插入排序法插入AET表, 使之按ⅹ坐标递增顺序排列 遍历AET表,把配对交点之间的区域(左闭右开)上的 各像素(Xy),用 Draw Pixel(,y, color)设置填充颜色; 遍历AET表,把ymax=i的结点从AET表中删除,并把 ymax>结点的x值递增△x 若允许多边形的边子相交,则用冒泡排序法对AET 表重新排序; }/* End polygonfill米
把ymin=i的边放进边表 NET[i]; } y=最低扫描线号; 初始化活性边表AET为空; for (各条扫描线 i) { 把新边表NET[i]中的边结点用插入排序法插入AET表, 使之按x坐标递增顺序排列; 遍历AET表,把配对交点之间的区域(左闭右开)上的 各像素(x,y),用DrawPixel(x,y,color)设置填充颜色; 遍历AET表,把ymax=i的结点从AET表中删除,并把 ymax>i结点的x值递增△x; 若允许多边形的边子相交,则用冒泡排序法对AET 表重新排序; } } /* End Polygonfill */
多边形区域填充算法又称为有序边表 算法,该算法对显示的每个像素只访问 次,这样,输入/输出的要求可降低为最少 有由于该算法与输入/输出的细节无关,因 而它也是与设备无关的。该算法的主要缺 点是对各种表的维持和排序开销太大,适 合软件实现而不适合硬件实现
多边形区域填充算法又称为有序边表 算法,该算法对显示的每个像素只访问一 次,这样,输入/输出的要求可降低为最少。 有由于该算法与输入/输出的细节无关,因 而它也是与设备无关的。该算法的主要缺 点是对各种表的维持和排序开销太大,适 合软件实现而不适合硬件实现