网站大量收购独家精品文档,联系QQ:2885784924

计算机图形学区域填充算法的实现.doc

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

实验四 区域填充算法的实现 班级 08信计二 学号 64 姓名 刘辉 分数 一、实验目的和要求: 理解区域的表示和类型; 能够正确区分四连通、八连通的区域; 了解填充函数、区域填充的实现原理; 了解掌握区域填充的各种算法(种子填充算法、扫描线算法、边填充算法等),并实现种子填充算法和扫描线算法; 用种子填充算法实现四连同区域和八连通区域的填充,并观察他们之间的区别; 分析对比种子填充算法和扫描线算法实现的像素逼近效果和程序执行速度; 二、实验原理: 用点阵方法表示的多边形区域,如果其内部像素具有同一种颜色,而边界像素具有另一种颜色,可以使用种子填充算法和扫描线算法等填充。 种子填充算法是从区域内任一个种子像素位置(x,y)开始,由内向外将填充色扩散到整个多边形区域的填充过程;扫描线填充算法是当给定种子点(x,y)时,首先填充种子点所在扫描线上位于给定区域的一个区段,然后确定与这一段相连通的上、下两条扫描线上位于给定区域内的区段,并依次保存下来的过程。 三、实验内容及步骤: 3.1、实验内容: 利用种子算法实现内点表示的四连通区域的填充。如:设(x,y)为内点表示的四连通区域内的一点,oldcolor为区域的原色,要将整个区域填充为新的颜色newcolor; 利用扫描线算法实现以上区域的填充。如:填充以下图案,圆中填充蓝色,三角形中填充红色; 3.2、实验步骤: 种子填充算法的步骤: 种子入栈; 当栈非空时,进行下面的操作,否则结束; 栈顶元素出栈,如果是未填充的内部点,则将其填充,继续考察与其连通的点,若是为填充的内部点,则该点入栈,返回2步。 扫描线填充算法的步骤: 初始化,置栈为空,将种子点(x,y)入栈。 出栈,若栈空则结束;否则取栈顶元素(x,y),以y作为扫描线。 填充并确定种子点所在区段,从种子点(x,y)出发,沿当前扫描线向左、右两个方向填充,直到边界。 确定新的种子点,在以上确定的边界中检查与当前扫描线y上、下相邻的两条扫描线上的像素。若存在非边界、未填充的像素,则把每一区间的最右像素作为种子点压入堆栈,返回2步。 四、程序代码 (1)、内点表示的四连通区域的种子递归填充算法(基于TurboC): #includegraphics.h void floodfill4(int x,int y,int oldcolor,int newcolor) { if(getpixel(x,y)==oldcolor) { putpixel(x,y,newcolor); delay(2000); floodfill4(x,y+1,oldcolor,newcolor); floodfill4(x,y-1,oldcolor,newcolor); floodfill4(x-1,y,oldcolor,newcolor); floodfill4(x+1,y,oldcolor,newcolor); } } main() { int a,b,c,d,i,j; int graphdriver=DETECT; int graphmode=0; initgraph(graphdriver,graphmode, ); cleardevice(); setcolor(14); rectangle(250,250,300,300); for(i=251;i300;i++) for(j=251;j300;j++) { putpixel(i,j,4); delay(1000); } a=257; b=270; c=4; d=2; floodfill4(a,b,c,d); getch(); closegraph(); } (2)、内点表示的八连通区域的种子递归填充算法的调用函数: void floodfill8(int x,int y,int oldcolor,int newcolor) { if(getpixel(x,y)==oldcolor) { putpixel(x,y,newcolor); delay(2000); floodfill8(x,y+1,oldcolor,newcolor); floodfill8(x,y-1,oldcolor,newcolor); floodfill8(x-1,y,oldcolor,newcolor); floodfill8(x+1,y,oldcolor,newcolor); floodfill8(x+1,y+1,oldcolor,newcolor); floodfill8(x+1,y-1,oldcol

文档评论(0)

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

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

1亿VIP精品文档

相关文档