- 1、本文档共10页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
计算机图形学四连通区域种子
填充算法实验
《计算机图形学实验》报告
任课教师:钱文华
2016年春季学期
实验:四连通区域种子填充算法
实验时间:2016年12月8日
实验地点:信息学院2204
实验目的:掌握种子填充算法的原理,并会用种子填充算法和opengl
并结合使用c++语言编写程序绘制多边形。
实验原理:种子填充算法又称为边界填充算法。其基本思想是:从多
边形区域的一个内点开始,由内向外用给定的颜色画点直到边界为
止。如果边界是以一种颜色指定的,则种子填充算法可逐个像素地处
理直到遇到边界颜色为止。内点的检测条件:
if(interiorColor!=borderColorinteriorColor!=fillColor)。
种子填充算法常用四连通域和八连通域技术进行填充操作。从区域内
任意一点出发,通过上、下、左、右四个方向到达区域内的任意像素。
用这种方法填充的区域就称为四连通域;这种填充方法称为四向连通
算法。从区域内任意一点出发,通过上、下、左、右、左上、左下、
右上和右下八个方向到达区域内的任意像素。用这种方法填充的区域
就称为八连通域;这种填充方法称为八向连通算法。
一般来说,八向连通算法可以填充四向连通区域,而四向连通算法有
时不能填充八向连通区域。
四向连通填充算法:
a)种子像素压入栈中;
b)如果栈为空,则转e);否则转c);
c)弹出一个像素,并将该像素置成填充色;并判断该像素相邻的四
连通像素是否为边界色或已经置成多边形的填充色,若不是,则将该
像素压入栈;
d)转b);
e)结束。
四连通填充算法利用到了递归的思想。
本实验只包括四连通填充算法
程序代码:#includeglut.h
#includestdlib.h
#includemath.h
#includewindows.h
voidinit(void){glClearColor(1.0,1.0,1.0,0.0);
glMatrixMode(GL_PROJECTION);
gluOrtho2D(0.0,300.0,0.0,300.0);
}
voidsetPixel(intx,inty,long
fillColor){glColor3f(fillColor16,fillColor8,fillColor);
glBegin(GL_POINTS);
glVertex2i(x,y);glEnd();
}
voidboundaryFill4(intx,inty,longfillColor,longborderColor)
{unsignedcharparams[3];
longinteriorColor;
glReadPixels(x,y,1,1,GL_RGB,GL_UNSIGNED_BYTE,params);
interiorColor=RGB(params[0],params[1],params[2]);
if(interiorColor!=borderColorinteriorColor!=fillColor)
glutInitWindowSize(300,300);
种子填充种子填充
init();
glutDisplayFunc(lineSegment);
glutMainLoop();
}
上实验课时机房的实验结果:
后来的实验结果:
glVertex2i(0,40);
glVertex2i(20,0);
glVertex2i(60,0);
glVertex2i(80,40);
glVertex2i(60,80);
glVertex2i(20,80);
glEnd();
boundaryFill4(60,60,fillColor,borderColor);
以上这段程序改成如下
glVertex2i(90,40);
glVe
文档评论(0)