- 1、本文档共64页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
* 计算机图形学 * 多边形扫描转换与区域填充方法比较 不同点: 1.基本思想不同;前者是顶点表示转换成点阵表示,后者只改变区域内填充颜色,没有改变表示方法。 2.对边界的要求不同 前者只要求扫描线与多边形边界交点个数为偶数。后者:区域封闭,防止递归填充跨界。 3.基本的条件不同 前者:从边界顶点信息出发。 后者:区域内种子点。 * 计算机图形学 * * 计算机图形学 * 3.4.1.4 栅栏填充算法 为了减少重复计算,可采用栅栏算法,栅栏指的是一条过多边形顶点且与扫描线垂直的直线。它把多边形分为两半。 * 计算机图形学 * 算法过程 对于每个扫描线与多边形的交点,将交点与栅栏之间的像素取补,若交点位于栅栏左边,则将交点之右,栅栏之作的所有像素取补,若交点位于栅栏右边,则将栅栏之左,交点之右的像素取补。 * 计算机图形学 * 栅栏算法图示 * 计算机图形学 * 3.4.1.5 边界标志算法 1. 对多边形的每一条边进行扫描转换,即对多边形边界所经过的象素作一个边界标志。 2.填充。对每条与多边形相交的扫描线,按从左到右的顺序,逐个访问该扫描线上的象素。 取一个布尔变量inside来指示当前点的状态,若点在多边形内,则inside为真。若点在多边形外,则inside为假。 Inside 的初始值为假,每当当前访问象素为被打上标志的点,就把inside取反。对未打标志的点,inside不变。 * 计算机图形学 * 边界标志算法:算法过程 void edgemark_fill(polydef, color) 多边形定义 polydef; int color; { 对多边形polydef 每条边进行直线扫描转换; inside = FALSE; for (每条与多边形polydef相交的扫描线y ) for (扫描线上每个象素x ) { if(象素 x 被打上边标志) inside = ! (inside); if(inside!= FALSE) drawpixel (x, y, color); else drawpixel (x, y, background); } } * 计算机图形学 * 边界标志算法 用软件实现时,扫描线算法与边界标志算法的执行速度几乎相同, 但由于边界标志算法不必建立维护边表以及对它进行排序,所以边界标志算法更适合硬件实现,这时它的执行速度比有序边表算法快一至两个数量级。 思考:如何处理边界的交点个数使其成为偶数? * 计算机图形学 * 3.4.2 区域填充算法 3.4.2.1 种子填充法 区域指已经表示成点阵形式的填充图形,它是象素的集合。 区域填充指先将区域的一点赋予指定的颜色,然后将该颜色扩展到整个区域的过程。区域填充算法要求区域是连通的 * 计算机图形学 * 区域填充 表示方法:内点表示、边界表示 内点表示 枚举出区域内部的所有像素 内部的所有像素着同一个颜色 边界像素着与内部像素不同的 颜色 边界表示 枚举出边界上所有的像素 边界上的所有像素着同一颜色 内部像素着与边界像素不同的颜色 * 计算机图形学 * 区域填充 区域填充要求区域是连通的 连通性:4连通、8连通 4连通: 8连通 4 4 p 4 4 (b)p的8-邻接点 8 8 8 8 8 p 8 8 8 (a)p的4-邻接点 邻接点的定义 * 计算机图形学 * 区域填充 4连通与8连通区域的区别 连通性: 4连通可看作8连通区域,但对边界有要求 * 计算机图形学 * 区域的边界表示和内点表示 (a)以边界表示的4-连通区域 (d)以内点表示的8-连通区域 (b)以内点表示的4-连通区域 (c)以边界表示的8-连通区域 * 计算机图形学 * 四邻域法不能正确填充一些特殊图形 * 计算机图形学 * 种子填充算法-4邻域 算法的输入:种子点坐标(x,y),填充色和边界颜色。 栈结构实现4-连通边界填充算法的算法步骤为: 种子象素入栈;当栈非空时重复执行如下三步操作: (1)栈顶象素出栈; (2)将出栈象素置成填充色; (3)按一定顺序检查出栈象素的4-邻接点,若其中某个象素点不是边界色且未置成多边形色,则把该象素入栈。 * 计算机图形学 * 种子填充算法-8邻域 栈结构实现8-连通边界填充算法的算法步骤为: 种子象素入栈;当栈非空时重复执行如下三步操作: (1)栈顶象素出栈; (2)将出栈象素置成填充色; (3)按一定顺序检查出栈象素的8-邻接点,若其中某个象素点不是边界色且未置成多边形色,则把该象素入栈。 * 计算机图形学 * 种子填充算法 适合于内
文档评论(0)