资源描述:
《实验三、画圆与凸多边形填充算法.doc》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、.华北水利水电大学计算机图形学实验报告2017--2018学年第一学期2014级计算机科学与技术专业指导老师曹源昊班级2014157学号201415717姓名李卫朋实验三、画圆与凸多边形填充算法1.实验目的练习直线和圆的光栅扫描线算法,多边形的扫描转换算法。2.实验内容和要求按要求完成以下三个作业。提交纸质实验报告,同时提交实验报告和源代码的电子版。(I).利用Bresenham直线扫描算法绘制任意直线段。输入为起点坐标(x0,y0)和终点坐标(x1,y1)以及线宽w,利用Bresenham算法计算离散的近
2、似像素点,并在OpenGL窗口中绘制该线段。要求绘制至少五条线段,具有不同的斜率,不同的起点和终点,不同的线宽。不允许直接调用GL_LINES来实现。(II).利用中点画圆算法绘制圆。输入为圆心(xc,yc)和圆的的半径r,利用中点画圆算法计算离散的近似像素点,并在OpenGL窗口中绘制。要求绘制至少四个圆,构成一个图案,比如奥迪车标或五环。(III).实现多边形的扫描转换算法。输入一个凸多边形的顶点序列,利用活性边表计算每条扫描线上位于多边形内部的像素,并填充上一个新颜色,最终达到填充多边形内部的目的。建
3、议:为了实现坐标点和像素的一一对应,建议坐标轴的范围和窗口像素宽高一致,比如:glutInitWindowSize(800,600);//像素宽800,高600坐标系设定为:gluOrtho2D(-400,400,-300,300);//坐标轴x方向宽为800,y方向高为6003.算法描述使用OpenGL进行画图,采用VS编程环境。4.源程序代码(1)//bresenham直线.cpp:定义控制台应用程序的入口点。//#include"stdio.h"#include"stdafx.h"#include"g
4、lut.h"#include"stdlib.h"#include"math.h"#include"iostream"usingnamespacestd;GLsizeiwinWidth=400,winHeight=300;//屏幕显示宽高.inta[100],b[100],c[100],d[100],n=-1;voidinit()..{glClearColor(1.0,1.0,1.0,1.0);glMatrixMode(GL_PROJECTION);gluOrtho2D(0.0,200.0,0.0,150.0
5、);}voidlineBres(intx0,inty0,intxEnd,intyEnd){intdx=abs(xEnd-x0),dy=abs(yEnd-y0);intp=2*dy-dx;inttwoDy=2*dy,twoDyMinusDx=2*(dy-dx);intx,y;if(x0>xEnd){x=xEnd;y=yEnd;xEnd=x0;}else{x=x0;y=y0;}glBegin(GL_POINTS);glVertex2i(x,y);glEnd();while(x6、p+=twoDy;else{y++;p+=twoDyMinusDx;}glBegin(GL_POINTS);glVertex2i(x,y);glEnd();}}voiddisplayFcn(){..glColor3f(1.0,0.0,0.0);for(inti=0;i<=n;i++){lineBres(a[i],b[i],c[i],d[i]);}glFlush();}voidwinReshpeFcn(GLintnewWidth,GLintnewHeight){glMatrixMode(GL_PROJECTI
7、ON);glLoadIdentity();gluOrtho2D(0.0,GLdouble(newWidth),0.0,GLdouble(newHeight));glClear(GL_COLOR_BUFFER_BIT);winWidth=newWidth;winHeight=newHeight;}int_tmain(intargc,char**argv){glutInit(&argc,argv);glutInitDisplayMode(GLUT_SINGLE
8、GLUT_RGB);glutInitWindowP
9、osition(100,100);glutInitWindowSize(winWidth,winHeight);glutCreateWindow("bresenham直线");init();inth=1;while(h==1){printf("输入起点和终点的坐标");n++;scanf_s("%d%d%d%d",&a[n],&b[n],&c[n],&d[n]);glutDisplayFunc(displayFc