《计算机图形学》课内实验报告(实验三)

上传人:cl****1 文档编号:489929284 上传时间:2022-09-11 格式:DOC 页数:12 大小:186KB
返回 下载 相关 举报
《计算机图形学》课内实验报告(实验三)_第1页
第1页 / 共12页
《计算机图形学》课内实验报告(实验三)_第2页
第2页 / 共12页
《计算机图形学》课内实验报告(实验三)_第3页
第3页 / 共12页
《计算机图形学》课内实验报告(实验三)_第4页
第4页 / 共12页
《计算机图形学》课内实验报告(实验三)_第5页
第5页 / 共12页
点击查看更多>>
资源描述

《《计算机图形学》课内实验报告(实验三)》由会员分享,可在线阅读,更多相关《《计算机图形学》课内实验报告(实验三)(12页珍藏版)》请在金锄头文库上搜索。

1、计算机图形学课内实验报告学生姓名:及 学 号:学 院:理学院班 级:课程名称:计算机图形学实验题目:区域填充算法指导教师姓名及职称:讲 师讲 师 2014年4月4日目 录一、实验题目1二、实验目的1三、实验内容1四、实验结果2五、实验体会或遇到问题9一、实验题目区域填充算法二、实验目的1掌握扫描转换矩形、多边形和扇形的扫描线填充、种子填充算法。2要求根据给定的图形如矩形、多边形和扇形通过扫描线填充、种子填充算法对它们进行区域填充,并用颜色显示填充后的图形。三、实验内容已知,多边形覆盖了12条扫描线,共有7个顶点和7条边,7个顶点分别为:,。在1024*768的显示分辨率下,将多边形顶点放大为,

2、。1使用扫描线填充算法填充所给多边形功能说明:1)自定义屏幕二维坐标系,原点位于客户去中心,x轴水平向右为正,y轴垂直向上为正;2)设置屏幕背景色为白色,调用Windows的颜色对话框选择填充颜色使用单一颜色填充多边形;3)使用有效边表填充算法填充所给多边形及其边界线。2使用多边形种子填充算法填充所给多边形功能说明:1)自定义屏幕二维坐标系,原点位于客户去中心,x轴水平向右为正,y轴垂直向上为正;2)设置屏幕背景色为白色,调用Windows的颜色对话框选择填充颜色,默认填充色为蓝色;3)判断种子像素是否位于多边形区域之内;4)对于位于多边形内部的种子像素,使用区域四邻接点种子填充算法填充多边形

3、,填充完毕给出提示信息。注:1,2完成其一即可。四、实验结果1使用扫描线填充算法填充所给多边形源程序:#include #include #include #include #include #include #define OX 270 /坐标轴原点在窗口中的位置#define OY 320 /坐标轴原点在窗口中的位置#define NULL 0 /C+中没有NULL这个符号常量,这里用宏定义#define WINDOW_HEIGHT 640 /定义窗口高为600#define WINDOW_WIDTH 540 /定义窗口宽为540#define ROUND(a) (int)(a+0.5)#

4、define drawOneLine(x1,y1,x2,y2) glBegin(GL_LINES);glVertex2f(x1),(y1);glVertex2f(x2),(y2);glEnd();struct dcPt int x;int y;void setPixel(GLint x,GLint y) /用OpenGL函数改写setPixel glBegin(GL_POINTS);glVertex2i(x,y);glEnd();typedef struct tEdge int yUpper;float xIntersect, dxPerScan;struct tEdge * next; Ed

5、ge;void insertEdge (Edge * list, Edge * edge)Edge * p, * q = list;p = q-next;while (p != NULL) if (edge-xIntersect xIntersect)p = NULL;else q = p;p = p-next;edge-next = q-next;q-next = edge;int yNext (int k, int cnt, dcPt * pts)int j;if (k+1) (cnt-1)j = 0;elsej = k + 1;while (ptsk.y = ptsj.y)if (j+1

6、) (cnt-1)j = 0;elsej+;return (ptsj.y);void makeEdgeRec(dcPt lower, dcPt upper, int yComp, Edge * edge, Edge * edges)edge-dxPerScan =(float) (upper.x - lower.x) / (upper.y - lower.y);edge-xIntersect = lower.x;if (upper.y yUpper = upper.y - 1;elseedge-yUpper = upper.y;insertEdge (edgeslower.y, edge);v

7、oid buildEdgeList (int cnt, dcPt * pts, Edge * edges)Edge * edge;dcPt v1, v2;int i, yPrev = ptscnt - 2.y;v1.x = ptscnt-1.x; v1.y = ptscnt-1.y;for (i=0; icnt; i+) v2 = ptsi;if (v1.y != v2.y) edge = (Edge *) malloc (sizeof (Edge);if (v1.y next;while (p) q = p-next;insertEdge (active, p);p = q;void fil

8、lScan (int scan, Edge * active)Edge * p1, * p2;int i;p1 = active-next;while (p1) p2 = p1-next;for (i=p1-xIntersect; ixIntersect; i+)setPixel (int) i, scan);p1 = p2-next;void deleteAfter (Edge * q)Edge * p = q-next;q-next = p-next;free (p);void updateActiveList (int scan, Edge * active)Edge * q = act

9、ive, * p = active-next;while (p) if (scan = p-yUpper) p = p-next;deleteAfter (q);else p-xIntersect = p-xIntersect + p-dxPerScan;q = p;p = p-next;void resortActiveList (Edge * active)Edge * q, * p = active-next;active-next = NULL;while (p) q = p-next;insertEdge (active, p);p = q;void scanFill (int cn

10、t, dcPt * pts)Edge *edgesWINDOW_HEIGHT, * active;int i, scan;for (i=0; inext = NULL;buildEdgeList (cnt, pts, edges);active = (Edge *) malloc (sizeof (Edge);active-next = NULL;for (scan=0; scannext) fillScan (scan, active);updateActiveList (scan, active);resortActiveList (active);glFlush();Sleep(3);v

11、oid init (void) glClearColor (1.0, 1.0, 1.0, 0.0); glMatrixMode (GL_PROJECTION); gluOrtho2D (0.0, WINDOW_WIDTH, 0.0, WINDOW_HEIGHT);void drawString(const char* str) static int isFirstCall = 1; static GLuint lists; if( isFirstCall ) isFirstCall = 0; lists = glGenLists(128); wglUseFontBitmaps(wglGetCurrentDC(), 0, 128, lists); for(; *str!=0; +str) glCallList(lists + *str);void display(int num, dcPt * pts) char poinx20, poiny5, a3;a0=(char)44; glColor3f(0.0, 0.0, 0.0); for(int i=0;inum;i+) glRasterPos2f(ptsi.x,ptsi.y); i

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 幼儿/小学教育 > 小学课件

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号