我是靠谱客的博主 失眠鲜花,最近开发中收集的这篇文章主要介绍【区域填充】中的扫描线填充算法,活性边表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的新边表中。
例如,还是此图。

这里写图片描述

各扫描线的新边表如下:

这里写图片描述

三、算法小结

优点:对每个像素只访问一次。
缺点:数据结构复杂,表的维护排序开销大。

最后

以上就是失眠鲜花为你收集整理的【区域填充】中的扫描线填充算法,活性边表AET,新边表NET的全部内容,希望文章能够帮你解决【区域填充】中的扫描线填充算法,活性边表AET,新边表NET所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(36)

评论列表共有 0 条评论

立即
投稿
返回
顶部