- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
一个结论 4-连通区域的边界是8-连通的:边界点可以通过8-邻接点遍历 反之,8-连通区域的边界是4-连通的:边界点可以通过4-邻接点遍历 2. 区域填充 2.4 边界填充算法 算法思想:从内部一个种子像素出发,通过四连通(四向算法)或者八连通方向(八向算法)对所有像素进行遍历和着色操作,直到所有像素都完成着色操作为止。 边界填充算法实现(4-邻接点) 需要的数据结构 堆栈:后进先出。 1 2 3 首先,种子像素入栈,然后,当栈顶元素非空时,重复执行下面的操作: (1)栈顶像素出栈; (2)将出栈像素置成填充色; (3)检查出栈像素的4-邻接点,若其中某个像素点不是边界色且未置成多边形色,则把该像素入栈。返回到(1)。 算法演示 算法输入的初始数据: 种子点坐标,填充色,边界像素颜色。 算法具体实现 种子填充算法实现(8-邻接点) 算法演示 种子填充算法的优缺点 优点:可以填充带有内孔的区域 缺点:太多的像素被压入堆栈,同一像素被重复入栈。 种子算法改进--扫描线种子算法 种子像素入栈;当栈非空时作如下三步操作: (1)栈顶像素出栈; (2)沿扫描线对出栈像素的左右像素进行填充,直到遇到边界像素,即每出栈一个像素,就对包含该像素的整个扫描线区间进行填充。 (3)在区间中检查与当前扫描线相邻的上下两条扫描线的有关像素是否全为边界像素或已填充的像素,若存在非边界、未填充边界的像素,则把每一区间的最左像素取作种子像素入栈。返回到(1)。 算法演示 第五章 基本图形生成算法 多边形的扫描转换 算法实施 区域填充 字符和矢量图形的显示 反走样基础 扫描线算法 扫描线算法原理回顾 求交 排序 交点配对 区间填色 X扫描线算法缺点 ?实际上一条扫描线只和少数边相交,甚至没有和任意边相交,造成大量冗余计算。 计算交点时提取所有边与扫描线求交 有序边表算法--活性边表算法 改进原理: 处理一条扫描线时,仅对与它相交的边求交; 利用扫描线的连贯性 利用多边形边的连贯性 如一条扫描线排序后与多边形边的交点x坐标依次是x0, x1, x2,…,x2n+1,则对特殊点处理后,(x2i, x2i+1)(i=0,…,n)组成的区间为多边形内的区间。 我们把与当前扫描线相交的多边形边称为活性边(Active Edge,AE) 多边形边的连贯性: 某条边和当前扫描线相交时,它很可能也与下一条扫描线相交,并且交点坐标遵循下面的规律。 (xi, yi) (xi+dx, yi+1) 1 1/k 即对一条边y=kx+b来说,如果当前扫描线得到的交点为(xi, yi), 则下一条扫描线交点为(xi+1/k, yi+1) 直线方程y=kx+b dy/dx=k, 即dx=dy/k 微分形式: 此时dy=1, 则dx=1/k 找到一条边上前后扫描线交点的关系,如何加以利用? 增量算法思想: 扫描线改变时,同一条边上的后一个交点,可以利用上一次求交点的结果,直接加上一个增量来得到。 x的增量dx =1/k, y的增量dy=1 使用一个数据结构来表示与当前扫描线相交的边,扫描线改变时,只要相交边--活性边不变,则不需要对该数据结构中的内容修改。 有初始值,有算法结束的限制条件。对于任意一条相交边 其交点的初始值为Y值小的端点;终止于Y值较大的端点。 数据结构: 活性边表(Active Edge Table, AET) 把活性边按照与扫描线交点x坐标递增的顺序存放在一个链表中,该链表称为活性边表。 活性边表的结构和存储内容: 一个活性边表对应多个节点,一个节点对应一条边,多个节点之间按照x从小到大规则,进行排序。 x0 ymax0 next 1/k0 x1 ymax1 null 1/k1 具有两条边的活性链表 活性边表的操作 根据边的连贯性,当前扫描线发生改变时: 如果没有新的活性边加入,也没有边到达终点,此时新扫描线和边相交的交点序列不发生改变。 处理下一条扫描线时,如有新边加入,则新边需要作为新节点插入适当位置?适合插入排序。 当某个相交边到达终点,则需要将该边从活性边表中删除。 边表(Edge Table, ET)/新边表 对于每个扫描线,建立一个最小y坐标位于该扫描线上的活性边的链表,来表示从下到上扫描到该扫描线时,新增加的活性边。全体扫描线就对应了一个(新)边表。 从下到上扫描过程中,只有下一条扫描线具有一个对应的活性边的链表时,才需要对当前的活性边表进行插入新边的操作。 边表的构造 (1)首先构造一个纵向线性表,表的长度为多边形所占有的最大扫描线数,表的每个结点,称为一个桶,对应多边形覆盖的每一条扫描线。 (2)每条边的数据形成一个结点,内容包括:该扫描线与该边的初始交点x
文档评论(0)