1 /************************************************************* 2 pb-图形学题3 3 中点算法之y=x^2/16; 4 5 *************************************************************/ 6 7 8 #include <GL/glut.h> 9 #include<cstdio> 10 #include<cmath> 11 12 13 void init() 14 { 15 glutInitDisplayMode(GLUT_RGB | GLUT_SINGLE); //什么单缓存的东西,现在不懂什么意思,就当通用条件 16 glutInitWindowPosition(0, 0); //图片出现的位置 17 glutInitWindowSize(400, 300); //图片的长和宽 18 glutCreateWindow("pb-图形学题1"); //图片的名字 19 20 glClearColor(0.0, 0.0, 0.0, 0.0); 21 glMatrixMode(GL_PROJECTION); 22 gluOrtho2D(-100, 100, -10, 200); 23 24 glRectf(-0.5f, -0.5f, 0.5f, 0.5f); 25 glClear(GL_COLOR_BUFFER_BIT); 26 glColor3f(1.0, 0.0, 0.0); //线的颜色 27 } 28 29 30 void setPixel (GLint x,GLint y,GLint nx,GLint ny) //描点函数,表示从x,y到nx,ny的矩形全部涂色 31 { 32 glBegin(GL_LINES); 33 glVertex2i(x, y); 34 glVertex2i(nx,ny); 35 glEnd(); 36 } 37 38 void myDisplay() 39 { 40 int d=-7; 41 int x1=0,x2=0; 42 int y1=0,y2=0; 43 while (x1<=8) 44 { 45 x2=x1+1; 46 if (d<=0) 47 { 48 d+=2*x2+1; 49 y2=y1; 50 } 51 else 52 { 53 d+=2*x2-15; 54 y2=y1+1; 55 } 56 setPixel(x1,y1,x2,y2); 57 setPixel(-x1,y1,-x2,y2); 58 y1=y2; 59 x1=x2; 60 } 61 d=8; 62 while (y1<=100) 63 { 64 y2=y1+1; 65 if (d>0) 66 { 67 x2=x1+1; 68 d+=16-(x1*x1-(x1-1)*(x1-1)+1); 69 } 70 else 71 { 72 x2=x1; 73 d+=16; 74 } 75 setPixel(x1,y1,x2,y2); 76 setPixel(-x1,y1,-x2,y2); 77 y1=y2; 78 x1=x2; 79 } 80 glFlush(); 81 } 82 83 int main(int argc, char *argv[]) 84 { 85 glutInit(&argc, argv); 86 init(); //初始化数据 87 glutDisplayFunc(&myDisplay); //调用函数 88 glutMainLoop(); //开始程序 89 return 0; 90 }