您好,欢迎访问三七文档
当前位置:首页 > 商业/管理/HR > 其它文档 > 南昌大学信工学院计算机图形学实验报告(附详细代码)
1实验报告实验课程:计算机图形学学生姓名:XXX学号:XXX专业班级:计算机科学与技术X班20XX年XX月XX日2目录实验一直线和圆的生成...........................................................3实验二区域填充.....................................................................12实验三裁剪算法.....................................................................15实验四Bezier曲线的绘制.....................................................23实验五B样条曲线的绘制.....................................................273南昌大学实验报告学生姓名:学号:专业班级:实验类型:□验证□综合□设计□创新实验日期:实验成绩:实验一直线和圆的生成一、实验项目名称直线和圆的生成二、实验目的1、掌握DDA、Bresenham直线生成算法;2、掌握中点画圆生成算法三、实验要求1、编程实现DDA、Bresenham算法生成直线2、编程实现中点画圆的算法四、实验步骤1、根据实验要求分析实验,并写出相应算法的实现2、选择适当语言实现算法;3、调试程序。五、实验内容1、Bresenham画线算法的实现#includegl\glut.h#includestdlib.h#includemath.hvoidinit(void){glClearColor(1.0,1.0,1.0,0.0);glMatrixMode(GL_PROJECTION);gluOrtho2D(0.0,600.0,0.0,500.0);}voidsetPixel(intx,inty){glBegin(GL_POINTS);glVertex2i(x,y);4glEnd();}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(x0xEnd){x=xEnd;y=yEnd;}else{x=x0;y=y0;}setPixel(x,y);while(xxEnd){x++;if(p0)p+=twoDy;else{y++;p+=twoDyMinusDx;}setPixel(x,y);}}voidlineSegment(void){glClear(GL_COLOR_BUFFER_BIT);glColor3f(0.0,0.0,1.0);lineBres(50,50,400,300);glFlush();}voidmain(intargc,char**argv){glutInit(&argc,argv);5glutInitDisplayMode(GLUT_SINGLE|GLUT_RGB);glutInitWindowPosition(50,100);glutInitWindowSize(400,300);glutCreateWindow(AnLineOpenGLProgram);init();glutDisplayFunc(lineSegment);glutMainLoop();}2、DDA算法的实现#includegl\glut.h#includemath.hvoidinit(void){glClearColor(1.0,1.0,1.0,0.0);glMatrixMode(GL_PROJECTION);gluOrtho2D(0.0,600.0,0.0,500.0);}voidsetPixel(intx,inty){glBegin(GL_POINTS);glVertex2i(x,y);glEnd();}inlineintround(constfloata){returnint(a+0.5);}voidlineDDA(intx0,inty0,intxEnd,intyEnd){intdx=xEnd-x0,dy=yEnd-y0,steps,k;floatxIncrement,yIncrement,x=x0,y=y0;if(abs(dx)abs(dy))steps=abs(dx);elsesteps=abs(dy);xIncrement=GLfloat(dx)/GLfloat(steps);yIncrement=GLfloat(dy)/GLfloat(steps);setPixel(x,y);6for(k=0;ksteps;k++){x+=xIncrement;y+=yIncrement;setPixel(x,y);}}voidlineSegment(void){glClear(GL_COLOR_BUFFER_BIT);glColor3f(1.0,0.0,0.0);lineDDA(50,50,400,300);glFlush();}voidmain(intargc,char**argv){glutInit(&argc,argv);glutInitDisplayMode(GLUT_SINGLE|GLUT_RGB);glutInitWindowPosition(50,100);glutInitWindowSize(400,300);glutCreateWindow(DDAOpenGLProgram);init();glutDisplayFunc(lineSegment);glutMainLoop();}3、圆的生成#includegl\glut.h#includemath.hconstintn=20;constGLfloatR=0.5f;constGLfloatPi=3.1415926536f;voidinit(void){glClearColor(1.0,1.0,1.0,0.0);glMatrixMode(GL_PROJECTION);gluOrtho2D(0.0,200.0,0.0,150.0);}voidmyDisplay(void){inti;7glClear(GL_COLOR_BUFFER_BIT);glColor3f(1.0,0.0,0.0);glBegin(GL_POLYGON);for(i=0;in;++i)glVertex2f(R*cos(2*Pi/n*i),R*sin(2*Pi/n*i));glEnd();glFlush();}voidmain(intargc,char**argv){glutInit(&argc,argv);glutInitDisplayMode(GLUT_SINGLE|GLUT_RGB);glutInitWindowPosition(50,100);glutInitWindowSize(500,500);glutCreateWindow(AnCircleOpenGLProgram);init();glutDisplayFunc(myDisplay);glutMainLoop();return;}4、修改后的圆的生成#includeGL/glut.h#includemath.hconstintn=20;constGLfloatR=0.5f;constGLfloatPi=3.1415926536f;voidmyDisplay(void){inti;glClear(GL_COLOR_BUFFER_BIT);glColor3f(1.0,0.0,0.0);glBegin(GL_POLYGON);for(i=0;in;++i)glVertex2f(R*cos(2*Pi/n*i),R*sin(2*Pi/n*i));glEnd();glFlush();}intmain(intargc,char*argv[]){glutInit(&argc,argv);glutInitDisplayMode(GLUT_RGB|GLUT_SINGLE);glutInitWindowPosition(100,100);8glutInitWindowSize(400,400);glutCreateWindow(画圆的程序);glutDisplayFunc(&myDisplay);glutMainLoop();return0}5、中点画圆算法#includegl/glut.h#includestdlib.h#includemath.hvoidinit(void){glClearColor(1.0,1.0,1.0,0.0);glMatrixMode(GL_PROJECTION);gluOrtho2D(0.0,200.0,0.0,150.0);}classscreenPt{private:GLintx,y;public:screenPt(){x=y=0;}voidsetCoords(GLintxCoordValue,GLintyCoordValue){x=xCoordValue;y=yCoordValue;}GLintgetx()const{returnx;}GLintgety()const{returny;}voidincrementx(){x++;}voiddecrementy(){y--;}9};voidsetPixel(GLintxCoord,GLintyCoord){glBegin(GL_POINTS);glVertex2i(xCoord,yCoord);glEnd();}voidcircleMidpoint(GLintxc,GLintyc,GLintradius){screenPtcircPt;GLintp=1-radius;circPt.setCoords(0,radius);voidcieclePlotPoints(GLint,GLint,screenPt);cieclePlotPoints(xc,yc,circPt);while(circPt.getx()circPt.gety()){circPt.incrementx();if(p0)p+=2*circPt.getx()+1;else{circPt.decrementy();p+=2*(circPt.getx()-circPt.gety())+1;}cieclePlotPoints(xc,yc,circPt);}}voidcieclePlotPoints(GLintxc,GLintyc,screenPtcircPt){setPixel(xc+circPt.getx(),yc+circPt.gety());setPixel(xc-circPt.getx(),yc+circPt.gety());setPixel(xc+circPt.getx(),yc-circPt.gety());setPixel(xc-circPt.getx(),yc-circPt.gety());setPixel(xc+circPt.gety(),yc+circPt.getx());setPixel(xc-circPt.gety(),yc+circPt.getx());setPixel(xc+circPt.gety(),yc-circPt.getx());setPixel(xc-circPt.gety(),yc-circPt.getx());}voidmyDisplay(void)10{glClear(GL_COLOR_BUFFER_BIT);glColor3f(0.0,1.0,0.0);circleMidpoint(50,50,20);glFlush();voidmain(intargc,char**argv){glutInit(&argc,argv);glutInitDispl
本文标题:南昌大学信工学院计算机图形学实验报告(附详细代码)
链接地址:https://www.777doc.com/doc-3552506 .html