- 0
- 0
- 约5.2千字
- 约 48页
- 2022-09-19 发布于广东
- 举报
扫描线种子填充算法 种子像素入栈,当栈非空时,重复以下步骤: (1)栈顶像素出栈 (2)沿扫描线对出栈像素的左右像素进行填充,直到遇到边界像素为止 (3)将上述区间内最左、最右像素记为xl和xr (4)在区间[xl,xr]中检查与当前扫描线相邻的上下两条扫描线是否全为边界像素、或已填充的像素,若为非边界、未填充的像素,则把每一区间的最右像素取为种子像素入栈 第30页,共48页,编辑于2022年,星期三 扫描线算法分析(举例分析) 该算法也可以填充有孔区域。 像素中的序号标指它所在区段位于堆栈中的位置 第31页,共48页,编辑于2022年,星期三 扫描线算法分析(举例分析) 第32页,共48页,编辑于2022年,星期三 扫描线算法分析(举例分析) 第33页,共48页,编辑于2022年,星期三 扫描线算法分析(举例分析) 第34页,共48页,编辑于2022年,星期三 基本图形生成算法 第1页,共48页,编辑于2022年,星期三 3.2 实区域填充算法 确定待填充的象素,即检查光栅的每一像素是否位于多边形区域内 解决的主要问题是什么? 图案填充还有一个什么象素填什么颜色的问题 曲线围成的区域,可用多边形逼近 第2页,共48页,编辑于2022年,星期三 点在多边形内的包含性检验 检验夹角之和 射线法检验交点数 第3页,共48页,编辑于2022年,星期三 检验夹角之和 若夹角和为0,则点p在多边形外 若夹角和为360°,则点p在多边形内 A B C D E P A B C D E P 第4页,共48页,编辑于2022年,星期三 射线法检验交点数 A B C D E P A B C D E P 交点数=偶数(包括0) 点在多边形之外 交点数=奇数 点在多边形之内 z x 左闭右开 第5页,共48页,编辑于2022年,星期三 包围盒法 凸多边形 凹多边形 逐点测试效率低不实用怎么办? 第6页,共48页,编辑于2022年,星期三 实区域填充算法分类 扫描线填充算法---扫描线顺序 有序边表算法 边填充算法 种子填充算法---内部一个点出发 简单种子算法 扫描线种子算法 第7页,共48页,编辑于2022年,星期三 扫描线填充算法 求交:I4, I3, I2, I1 排序:I1, I2, I3, I4 交点配对:(I1, I2), (I3, I4) 区间填色 利用图形的空间连贯性和扫描线的连贯性 第8页,共48页,编辑于2022年,星期三 填充扩大化问题 解决方法: 取中心扫描线y+0.5 检查交点右方像素的中心是否落在区间内 xl≤x+0.5≤xr y x y 0 1 2 3 4 5 6 7 1 2 3 4 5 6 7 0 1 2 3 4 5 6 7 1 2 3 4 5 6 7 x P 1 P 2 P 3 P 4 x 第9页,共48页,编辑于2022年,星期三 顶点交点的计数问题 5 4 3 2 1 0 P1 P2 P3 P4 I1 I2 I3 I4 P5 扫描线5 扫描线4 扫描线3 扫描线2 扫描线1 I5 I6 检查交于该顶点的两条边的另外两个端点的y值大于该顶点y值的个数 计数0次 计数1次 计数2次 * 第10页,共48页,编辑于2022年,星期三 有序边表算法 影响一般扫描线填充算法效率的因素? 所有的边和扫描线求交,效率很低。因为一条扫描线往往只和少数几条边相交。 如何提高效率? 建立每条扫描线的活性边表 何谓活性边? 求交和排序 目标是简化交点计算 第11页,共48页,编辑于2022年,星期三 有序边表算法 与当前扫描线相交的边称为活性边(active edge),把它们按与扫描线交点x坐标递增的顺序存入一个链表中,边的活性边表 ( AEL, Active edge table)。它记录了多边形边沿扫描线的交点序列。 只需对当前扫描线的活性边表作更新,即可得到下一条扫描线的活性边表。 第12页,共48页,编辑于2022年,星期三 有序边表算法 如何计算下一条扫描线与边的交点。 直线方程:ax+by+c = 0 当前交点坐标:(xi, yi) 下一交点坐标:(xi+1,yi+1) xi+1= ((-byi+1)-c)/a = ((-byi-b)-c)/a =xi-b/a=xi+1/k 活动边表中需要存放的信息: x:当前扫描线与边的交点 △x=-b/a:从当前扫描线到下一条扫描线之间的x增量 ymax:边所交的最高扫描线 y=yi+1 y=yi Pj Pj+1 (xi,yi) (xi+1,yi+1) 第13页,共48页,编辑于2022年,星期三 有序边表算法 活性边表的更新 为了方便边的活性边表的更新,建立另一个表-新边表,存放在该扫描线第一次出现的边。 存放的信息: x:扫描线
原创力文档

文档评论(0)