收藏 分享(赏)

计算机图形学四连通区域种子填充算法实验.docx

上传人:weiwoduzun 文档编号:4128325 上传时间:2018-12-10 格式:DOCX 页数:9 大小:234.22KB
下载 相关 举报
计算机图形学四连通区域种子填充算法实验.docx_第1页
第1页 / 共9页
计算机图形学四连通区域种子填充算法实验.docx_第2页
第2页 / 共9页
计算机图形学四连通区域种子填充算法实验.docx_第3页
第3页 / 共9页
计算机图形学四连通区域种子填充算法实验.docx_第4页
第4页 / 共9页
计算机图形学四连通区域种子填充算法实验.docx_第5页
第5页 / 共9页
点击查看更多>>
资源描述

1、计算机图形学实验报告任课教师:钱文华2016 年春季学期实验: 四连通区域种子填充算法实验时间:2016 年 12 月 8 日实验地点:信息学院 2204实验目的:掌握种子填充算法的原理,并会用种子填充算法和opengl 并结合使用 c+语言编写程序绘制多边形。实验原理:种子填充算法又称为边界填充算法。其基本思想是:从多边形区域的一个内点开始,由内向外用给定的颜色画点直到边界为止。如果边界是以一种颜色指定的,则种子填充算法可逐个像素地处理直到遇到边界颜色为止。内点的检测条件:if(interiorColor!=borderColor glMatrixMode(GL_PROJECTION); g

2、luOrtho2D(0.0,300.0,0.0,300.0); void setPixel(int x,int y,long fillColor) glColor3f(fillColor16,fillColor8,fillColor); glBegin(GL_POINTS); glVertex2i(x,y); glEnd(); void boundaryFill4(int x,int y,long fillColor,long borderColor) unsigned char params3;long interiorColor; glReadPixels(x,y,1,1,GL_RGB,G

3、L_UNSIGNED_BYTE,params); interiorColor=RGB(params0,params1,params2); if(interiorColor!=borderColor boundaryFill4(x+1,y,fillColor,borderColor); boundaryFill4(x-1,y,fillColor,borderColor); boundaryFill4(x,y+1,fillColor,borderColor); boundaryFill4(x,y-1,fillColor,borderColor); void lineSegment(void) lo

4、ng borderColor=RGB(255,0,0);long fillColor=RGB(0,0,255); glClear(GL_COLOR_BUFFER_BIT); glColor3f(255,0,0); glBegin(GL_LINE_LOOP); glVertex2i(0,40); glVertex2i(20,0); glVertex2i(60,0);glVertex2i(80,40); glVertex2i(60,80); glVertex2i(20,80); glEnd(); boundaryFill4(60,60,fillColor,borderColor);glFlush(

5、); void main(int argc,char* argv) glutInit( glutInitDisplayMode(GLUT_SINGLE|GLUT_RGB); glutInitWindowPosition(150,100); glutInitWindowSize(300,300); glutCreateWindow(“种子填充“); init(); glutDisplayFunc(lineSegment); glutMainLoop(); 上实验课时机房的实验结果:后来的实验结果:glVertex2i(0,40); glVertex2i(20,0); glVertex2i(60,

6、0);glVertex2i(80,40); glVertex2i(60,80); glVertex2i(20,80); glEnd(); boundaryFill4(60,60,fillColor,borderColor);以上这段程序改成如下glVertex2i(90, 40);glVertex2i(120, 100);glVertex2i(90, 160);glVertex2i(60, 160);glVertex2i(60, 40); glEnd(); boundaryFill4(70,60,fillColor,borderColor);改变参数后:再把 glVertex2i(90, 40

7、);glVertex2i(120, 100);glVertex2i(90, 160);glVertex2i(60, 160);glVertex2i(60, 40); glEnd(); boundaryFill4(70,60,fillColor,borderColor);改成 glVertex2i(100, 100);glVertex2i(200, 100);glVertex2i(150, 150);/glVertex2i(60, 160);/glVertex2i(60, 40); glEnd(); boundaryFill4(150,120,fillColor,borderColor);后的结果如下图:实验总结:通过多组数据的测试,知道了上面算法的正确,普适性。种子填充的递归算法的优点是原理非常简单,容易理解,缺点是由于多次递归,费时,费内存,效率不高,需要大量栈空间来存储相邻的点,太大的区域会由于递归太深而无法运行。为了减少递归次数,可采用扫描线种子算法。扫描线填充算法就是它的改进的方法。它是通过沿扫描线填充水平像素段,来处理四连通或八连通相邻点,这样就仅仅只需要将每个水平像素段的起始位置压入栈,而不需要将当前位置周围尚未处理的相邻像素都压入栈,从而可以节省大量的栈空间。

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 网络科技 > 计算机原理

本站链接:文库   一言   我酷   合作


客服QQ:2549714901微博号:道客多多官方知乎号:道客多多

经营许可证编号: 粤ICP备2021046453号世界地图

道客多多©版权所有2020-2025营业执照举报