【区域填充】中的扫描线填充算法,活性边表AET,新边表NET

一、基本扫描线填充算法基础知识

(1)假定多边形的顶点已知

这里写图片描述

(2)基本思想:按扫描线从下到上扫描,一条一条确定区域内的像素
(3)步骤:
   ①求交。计算扫描线与多边形各边的交点。
   ②排序。把所有交点按x值的递增顺序排序。x1、x2、x3、x4、x5、x6……
   ③配对。[x1, x2],[ x3, x4] , [x5, x6]……每对交点代表扫描线与多边形的一个相交区间。
   ④填色。把相交区间内的像素置成多边形的颜色,把相交区间外的像素置成背景色。
(4)虽然以上步骤思想简单,但存在诸多问题。
  问题①交点刚好是多边形的顶点。
  问题②大量的求交运算。
  问题③无用的求交运算
  问题④交点排序

二、解决问题

(1)解决问题一。交点是顶点。极大值计数0次是为了防止区域扩大。

这里写图片描述

(2)解决问题二。大量求交运算。采用增量法。
当前扫描线合某边交点x坐标与下一条扫描线和这条边交点x坐标的关系。

这里写图片描述
这里写图片描述

(3)解决问题三。无用的求交运算。
P3P4和扫描线6相交,和扫描线7不想交,所以,7以上的扫描线都不用和P3P4求交。

这里写图片描述

(4)解决以上问题,我们采用以下数据结构。

①活性边表AET

活性边:和当前扫描线有交点的边。
活性边表的结点的数据结构:(与新边表结点的数据结构相同)

这里写图片描述

结点的更新:

这里写图片描述

具体实例:

这里写图片描述

则扫描线6的活性边表:(注意x坐标递增)

这里写图片描述

则扫描线7的活性边表:(注意x由增量得到,极大值计数为0)

这里写图片描述

②新边表NET

为了方便活性边表的建立与更新,为每一条扫描线建立一个新边表NET,存放在该扫描线第一次出现的边。也就是说,若某边的较低端点为Ymin,则该边就放在扫描线Ymin的新边表中。
例如,还是此图。

这里写图片描述

各扫描线的新边表如下:

这里写图片描述

三、算法小结

优点:对每个像素只访问一次。
缺点:数据结构复杂,表的维护排序开销大。
  • 33
    点赞
  • 132
    收藏
    觉得还不错? 一键收藏
  • 9
    评论
评论 9
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值