收藏 分享(赏)

计算机图形学实验报告8-种子点填充.doc

上传人:精品资料 文档编号:10747506 上传时间:2020-01-04 格式:DOC 页数:6 大小:76KB
下载 相关 举报
计算机图形学实验报告8-种子点填充.doc_第1页
第1页 / 共6页
计算机图形学实验报告8-种子点填充.doc_第2页
第2页 / 共6页
计算机图形学实验报告8-种子点填充.doc_第3页
第3页 / 共6页
计算机图形学实验报告8-种子点填充.doc_第4页
第4页 / 共6页
计算机图形学实验报告8-种子点填充.doc_第5页
第5页 / 共6页
点击查看更多>>
资源描述

1、 共 6 页1计算机图形学实验报告2016 年春季学期实验四:种子点填充算法 Seed Filling实验时间:2016 年 9 月底实验地点:实验目的:掌握使用 opengl 的种子点填充算法,观察改变参数对生成图形的改变( 改变点的位置、颜色等)如果要填充的区域是以图像元数据方式给出的,通常使用种子填充算法进行区域填充。种子填充算法的核心是一个递归算法,都是从指定的种子点开始,向各个方向上搜索,逐个像素进行处理,直到遇到边界。共 6 页2种子填充算法常用四连通域和八连通域技术进行填充操作。从区域内任意一点出发,通过上、下、左、右四个方向到达区域内的任意像素。用这种方法填充的区域就称为四连通

2、域;这种填充方法称为四向连通算法。从区域内任意一点出发,通过上、下、左、右、左上、左下、右上和右下八个方向到达区域内的任意像素。用这种方法填充的区域就称为八连通域;这种填充方法称为八向连通算法。算法的优点是非常简单,缺点是需要大量栈空间来存储相邻的点。程序代码:使用的运行环境是 vc+6.0#include #include typedef float Color3;/获取像素点的颜色void getpixel(GLint x, GLint y, Color color) glReadPixels(x, y, 1, 1, GL_RGB, GL_FLOAT, color); /OPENGL 自带

3、/画点函数void setpixel(GLint x, GLint y) glBegin(GL_POINTS);glVertex2f(x, y);glEnd();/比较颜色是否相等int compareColor(Color color1, Color color2) if (color10 != color20 | color11 != color21 | color12 != color22) return 0; else return 1; void boundaryFill4(int x, int y, Color fillColor, Color boarderColor) Colo

4、r interiorColor;getpixel(x, y, interiorColor);if (compareColor(interiorColor, fillColor) = 0 boundaryFill4(x + 1, y, fillColor, boarderColor);boundaryFill4(x - 1, y, fillColor, boarderColor);共 6 页3boundaryFill4(x, y + 1, fillColor, boarderColor);boundaryFill4(x, y - 1, fillColor, boarderColor);void

5、boundaryFill8(int x, int y, Color fillColor, Color boarderColor) Color interiorColor, a, b, c, d;getpixel(x, y, interiorColor);getpixel(x + 1, y, a);getpixel(x, y - 1, b);getpixel(x, y + 1, c);getpixel(x - 1, y, d);int i = 0;if (compareColor(a, boarderColor) = 1) i+;if (compareColor(b, boarderColor)

6、 = 1) i+;if (compareColor(c, boarderColor) = 1) i+;if (compareColor(d, boarderColor) = 1) i+;if (i = 1) if (compareColor(interiorColor, fillColor) = 0 boundaryFill8(x+1,y,fillColor,boarderColor);boundaryFill8(x-1,y,fillColor,boarderColor);boundaryFill8(x,y+1,fillColor,boarderColor);boundaryFill8(x,y

7、-1,fillColor,boarderColor);boundaryFill8(x-1,y+1,fillColor,boarderColor);boundaryFill8(x-1,y-1,fillColor,boarderColor);boundaryFill8(x+1,y+1,fillColor,boarderColor);boundaryFill8(x+1,y-1,fillColor,boarderColor);void polygon() glBegin(GL_LINE_LOOP);glLineWidth(5);/此处修改坐标,绘制多边形glVertex2f(100, 150);glV

8、ertex2f(150, 200);glVertex2f(200, 200);共 6 页4glVertex2f(200, 160);glEnd();void display(void) Color fillColor = 0.0, 1.0, 1.0;/填充颜色 Color boarderColor = 0.0, 1.0, 0.0;/边界颜色 glClear(GL_COLOR_BUFFER_BIT);glViewport(0, 0, 500, 500);glColor3fv(boarderColor);polygon();glColor3fv(fillColor);/boundaryFill4(

9、150, 150, fillColor, boarderColor);/设置起点坐标及颜色boundaryFill8(120, 160, fillColor, boarderColor);glFlush();int main(int argc, char *argv) glutInit(glutInitDisplayMode(GLUT_SINGLE | GLUT_RED);glutInitWindowSize(500, 500);glutInitWindowPosition(100, 100);glutCreateWindow(“BoundaryFill1“);glClearColor(1, 1, 1, 0.0);glMatrixMode(GL_PROJECTION);/投影模型gluOrtho2D(0.0, 500.0, 0.0, 500.0);glutDisplayFunc(display);glutMainLoop();return 0;实验结果:共 6 页5(更改颜色)共 6 页6(更改形状)

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

当前位置:首页 > 企业管理 > 管理学资料

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


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

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

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