CG3基本图形生成(3.3).ppt

  1. 1、本文档共36页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
3.3 区域填充 区域填充 区域填充可以分两步进行: 先确定需要填充哪些像素 再确定用什么颜色值来填充 四种方法: 有序边表填充算法 边填充算法 改进版边填充算法--栅栏填充算法 种子填充算法 3.3.2 边填充算法 3.3.3 种子填充算法 区域连通方式对填充结果的影响 简单的种子填充算法 (4连通边界) 种子像素入栈 当栈非空时,重复以下步骤: 栈顶像素出栈 将出栈象素置成填充色 按左、上、右、下顺序检查与出栈象素相邻的四象素,若其中某象素不在边界上且未被置成填充色,则将其入栈 3.3.4 圆和椭圆的填充 3.3.5 图案填充 第3次作业 1.写出其有序边表 2.写出每一条扫描线的活化边表 3.画出其边界填充过程 4.画出其栅栏填充过程 ⑿ 13 1.基本思想不同   扫描线算法是按扫描线顺序进行的。而种子填充算法要求先指定区域内的一点为种子点,然后从这点出发开始对区域进行着色。 2.对边界要求不同   在多边形扫描转换中,要求每一条扫描线与多边形边界的交点为偶数,对不封闭边界是允许的。   在区域填充中,要防止进行递归式填充时跨越边界,故要求4连通区域的边界为封闭的8连通区域,而8连通区域的边界要求为封闭的4连通区域。 扫描线算法与种子填充算法的比较 由于圆和椭圆的特殊属性,它们的填充算法比较简单 在实际应用中,有时需要用一种图案来填充平面区域。这可以通过对前述填充算法中写像素的那部分代码稍作修改来实现:在确定了区域内一像素之后,不是马上往该像素填色,而是先查询图案位图的对应位置。 图案定义: int pattern[8][8]= {{0,0,0,1,0,0,0,1},{0,0,0,1,0,0,0,1}, {0,0,0,1,0,0,0,1},{0,0,0,1,1,1,1,1}, {0,0,0,1,0,0,0,1},{0,0,0,1,0,0,0,1}, {0,0,0,1,0,0,0,1},{1,1,1,1,0,0,0,1}}; * * 如图1 多边形可表示成图2 图2 多边形的点阵表示 在计算机图形学中,多边形有两种重要的表示方法:顶点表示和点阵表示 多边形可表示成P0P1P2P3P4P0的点序列形式。 点阵表示:用位于多边形内的象素的集合来刻划多边形。 图1 多边形的顶点表示 P0 P1 P2 P3 P4 顶点表示:用多边形顶点的序列来刻划多边形。 用一种颜色或图案来填充一个二维区域。 首要问题:判断一个象素是在多边形内还是在多边形外。 x 1 2 3 4 5 9 6 8 11 7 10 12 0 1 2 3 4 5 6 7 8 y P1 P2 P3 P4 P5 P6 扫描线4 A B C D 扫描线6 扫描线6:四个交点,五个区间 多边形外 多边形内 多边形外 多边形外 多边形内 1.求交点:即求出每一条扫描线与多边形所有相交各边的交点,并建立起(xi,yi)的交点表。 2.交点排序:把所有交点按x坐标递增顺序进行排序。 3.交点配对:第一个与第二个,第三个与第四个等等。每对交点就代表扫描线与多边形的一个相交区间。 4.区间填色:把相交区间内的象素置成多边形的颜色,把相交区间外的象素置成背景的颜色。 问题:奇点处理.当扫描线恰好与多边形顶点相交时,称该交点为奇点 保证交点正确配对 P1 P2 P3 P4 P5 P6 2 4 6 8 O y x 第一种情况,共享顶点的两条边分别落在扫描线的两边。这时,交点只算一个。 第二种情况,共享交点的两条边落在扫描线的同一边,这时交点作为两个 扫描线1 扫描线2 扫描线7 E F G (1) (2) x 1 2 3 4 5 9 6 8 11 7 10 12 0 1 2 3 4 5 6 7 8 y P1 P2 P3 P4 P5 P6 (2,2) (5,1) (11,3) (2,7) (5,5) (11,8) 共享交点的两条边分别落在扫描线的两边 奇点有:点P2 P4 P5 P6 奇点有:点P1 P3 共享交点的两条边落在扫描线的同一边 按两个交点计算 按一个交点计算 在处理一条扫描线时,只需对与它相交的多边形的边进行求交运算。 计算下一条扫描线与同一条边的交点x值时,只需把当前交点x值加上一个边的反斜率即可: xk+1 = xk + 1 / m (m为边的斜率) 我们把与当前扫描线相交的边称为活化边 x: 当前扫描线与边的交点x ?x: 从当前扫描线到下一条扫描线之间的x增量 △x = 1/ m ymax: 边所交的最高扫描线号 按与扫描线交点x坐标递增

文档评论(0)

iris + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档