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