- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
3 多边形扫描及区域填充
第4章 扫描转换 鲁萍 第四章 基本图形生成算法 多边形的表示 区域填充 种子填充算法 多边形扫描转换 多边形的表示方法 顶点表示:用多边形顶点的序列来刻划多边形。 直观、几何意义强、占内存少 不能直接用于面着色。 点阵表示:用多边形内象素的集合来刻划多边形。 失去了许多重要的几何信息 便于运用帧缓冲存储器表示图形,易于面着色。 4.3 区域填充算法 区域:已经表示成点阵形式的填充图形,它是象素的集合。 区域填充:先将区域的一点赋予指定的颜色,然后将该颜色扩展到整个区域的过程。 区域填充算法要求区域是连通的 区域填充算法 区域填充要求区域是连通的 连通性 4连通 8连通 种子填充算法演示 种子填充算法 例:多边形由P0P1P2P3P4构成,P0(1,5)P1(5,5)P2(7,3)P3(7,1)P4(1,1) 设种子点为(3,3),搜索的方向是上、下、左、右。依此类推. 最后像素被选中并填充的次序如图中箭头所示 种子填充算法 种子填充算法缺点: (1) 有些象素会入栈多次,降低算法效率; (2) 递归执行,算法简单,但效率低 改进目标:减少递归次数,提高效率。 解决方法:扫描线填充算法 一次填充种子所在的一行 适用于边界表示的4连通区域 种子扫描线填充算法 (1)初始化:堆栈置空。将种子点(x,y)入栈。 (2)出栈:若栈空则结束。否则取栈顶元素(x,y),以y作为当前扫描线。 (3)填充并确定种子点所在区段:从种子点(x,y)出发,沿当前扫描线向左、右两个方向填充,直到边界。分别标记区段的左、右端点坐标为xl和xr。 (4)并确定新的种子点:在区间[xl,xr]中检查与当前扫描线y上、下相邻的两条扫描线上的象素。若存在非边界、未填充的象素,则把每一区间的最右象素作为种子点压入堆栈,返回第(2)步。 课堂练习:种子扫描线算法 完成该图形的填充,给出入栈填充的点序列 4.4.4 扫描转换多边形 多边形的表示方法 顶点表示:用多边形顶点的序列来刻划多边形。 直观、几何意义强、占内存少 不能直接用于面着色。 点阵表示:用多边形内象素的集合来刻划多边形。 失去了许多重要的几何信息 便于运用帧缓冲存储器表示图形,易于面着色。 多边形的扫描转换 多边形的扫描转换 把多边形的顶点表示转换为点阵表示,也就是从多边形的给定边界出发,求出位于其内部的各个象素,并给帧缓冲器内的各个对应元素设置相应的灰度和颜色。 几种方法: 逐点判断法 扫描线算法 边界标志法 逐点判断法 射线法 步骤: 从待判别点v发出射线 求交点个数k K的奇偶性决定了点与多边形的内外关系 扫描线算法 扫描线算法 顶点交点的计数问题 扫描线算法 x:当前扫描线与边的交点 △x:从当前扫描线到下一条扫描线之间的x增量 ymax:边所交的最高扫描线号 扫描线算法 对每条扫描线建立一个新边表 扫描线算法 对每一条扫描线 step1:把新边表NET[i]中的边结点,用插入排序法插入活性边表AET,使之按X坐标递增顺序排序; step2:遍历AET表,把配对交点之间的区间(左闭右开)上的各象 素(X,Y),用drawpixel(x,y,color)改写象素颜色值; step3:遍历AET表,把Ymax=i的结点从AET表中删除,并把 Ymax>i的结点的X值递增△X; step4:重复各扫描线 扫描线算法 示例 扫描线 1 NET[1]节点插入AET 扫描线算法 示例 扫描线 2 NET[2]节点插入AET 扫描线算法 示例 扫描线 3 NET[3]节点插入AET 扫描线算法 示例 扫描线 4 NET[4]节点插入AET (无新边) 扫描线算法 示例 扫描线 5 NET[5]节点插入AET 扫描线算法 示例 扫描线 6 NET[6]节点插入AET ( 无新边) 扫描线算法 示例 扫描线 7 NET[7]节点插入AET ( 无新边) 扫描线算法 示例 扫描线8 NET[8]节点插入AET ( 无新边) 扫描线算法 优点: 对每个像素只访问一次 与设备无关 * * 内点表示 内部的所有像素着同一个颜色 边界表示 边界上的所有像素着同一颜色 4连通区域填充结果 8连通区域填充结果 适合于内点表示区域的填充算法 设G为一内点表示的区域,(x,y)为区域内一点,old_color为G的原色。现取(x,y)为种子点对区域G进行填充:种子象素入栈,当栈非空时,执行如下三步操作: (1)栈顶象素出栈; (2)将出栈象素置成new_color ; (3)按右、上、左、下的顺序检查与出栈象素相邻的四个象素,若其中某
文档评论(0)