计算机图形学 区域填充课件.ppt

  1. 1、本文档共49页,可阅读全部内容。
  2. 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
计算机图形学 区域填充课件

第四讲 区域填充;1. 有关概念; 4)区域的建立(定义)方式: ①内定区域:在所定义的区域内所有的像素具有相同的属性(如颜色等)。 (内部定义方式) ②边界定义区域:以区域的内外属性来划分,区域内的像素和边界上的像素可具有不同的属性。 (外界定义方式); 5)连通性:分为四向连通和八向连通。 ①四连通:各像素在水平、垂直的上、下、左、右四个方向上是连通的。 ②八连通:各像素在上、下、左、右以及四个对角线方向都是连通的。 ;2.逐点判断填充算法;取矩形R(x1≤x≤x2,y1≤y≤y2),使R包围D, 则逐点判断填充算法如下: for(y=y1;y=y2;y++) for(x=x1;x=x2;x++) if(inside(D,x,y)) drawpixel(x,y,color); 上述算法原理简单、实用,但效率低; 效率低的原因是没有考虑各象素之间的联系,孤立地考察象素与区域的关系,使得几十万甚至几百万个象素都要一一判别,每次判别又要多次求交点,需要做大量的乘除运算,花费很多时间。 ;1)射线法; 2)累计角度法; 3)编码法; 4)…….. 这些内容在本书第八章几何造型中有专门介绍。;这里以射线法为例进行说明:;3.种子填充算法 ;1)深度递归的种子填充算法(漫水法);VC++程序实现;可以直接利用函数的递归调用来实现.;边界表示的4连通区域的递归填充算法: void BoundaryFill4(int x,int y,int boundarycolor,int newcolor) { int color= Getpixel(x,y); ? if(color!=newcolor color!=boundarycolor) ? { drawpixel(x,y,newcolor); ??? BoundaryFill4 (x,y+1, boundarycolor,newcolor); ??? BoundaryFill4 (x,y-1, boundarycolor,newcolor); ??? BoundaryFill4 (x-1,y, boundarycolor,newcolor); ??? BoundaryFill4 (x+1,y, boundarycolor,newcolor); ? } } 对于内点表示和边界表示的8连通区域的填充,只要将上述相应代码中递归填充相邻的4个象素增加到递归填充8个象素即可。;2)扫描线种子填充算法;扫描线区域填充算法 可由下列四个步骤实现:;例题: 针对下图所示的区域及给定的种子点H, 说明填充的过程。 ;VC++程序实现;4.区域填充图案 ;进行图案填充时,在不考虑图案旋转的情况下,必须确定区域与图案之间的位置关系。这可以通过把图案原点与区域某点对齐的办法来实现。 对齐方法有两种:第一种是把图案原点与填充区域边界或内部某点对齐。第二种方法是把图案原点与填充区域外部的某点对齐。 用第一种方法填充的图案,将随着区域的移动而移动,看起来很自然。对于多边形,可取区域边界上最左边的顶点。而对于圆和椭圆这样具有光滑边界的区域,则最好取区域内部的某一点,如中心,对应图案原点。;从算法复杂性看,第二种方法比较简单,并且在相邻区域用同一图案填充时,可以达到无缝连接的效果。但当区域移动时,图案不会跟着移动,区域内的图案变了。 下面来讨论在第二种方式下,如何对平面区域进行填充。 ; 假定图案是一个M*N位图,用M*N数组存放。M,N一般比需要填充的区域的尺寸小得多,所以图案总是周期性的使用。 假定区域内一象素(x,y), 对应于图案上的(x%M,y%N)。 若以透明方式填充图案, if (pattern[x%M][y%N]) putpixel(x,y); 若以不透明方式填充图案, if (pattern[x%M][y%N]) putpixel(x,y,color); else putpixel(x,y,bkcolor);;5.扫描线多边形填充算法 ;受淌毖抢抢粗原械掷省并谍祸伎墙恍仕韭煽媳当裴茁种韩滦焙拜逆冬父位计算机图形学 区域填充课件计算机图形学 区域填充课件;;重合点的处理:   当扫描线和边界相交于边界顶点时,同时产生两个交点,通常采用 “起闭终开”或“起开终闭” 。;; 把与当前扫描线相交的边称为活性边,并把它们按与扫描线交点x坐标递增的顺序存放在一个链表中,称此链表为活性边表(AET)。 活性边表的每个节点的

文档评论(0)

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

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

版权声明书
用户编号:8130065136000003

1亿VIP精品文档

相关文档