1 /* 2 pb-图形学题1; 3 中点画线; 4 虽然做出来了,但还有许多函数不懂; 5 给出k,起始点坐标,直线长度,画y=kx+b直线; 6 f=kx+b-y; 7 d[i]=k(x[i]+1)+b-(y[i]+0.5); 8 d[i+1]=k(x[i]+2)+b-(y[i+1]+0.5); 9 △d=d[i+1]-d[i]=k-(y[i+1]-y[i]); 10 d=d+k (d<0) 11 d=d+k-1 (d>=0) 12 d[0]=k+0.5; 13 */ 14 15 #include <GL/glut.h> 16 #include<cstdio> 17 int x,y,len; 18 double k; 19 void init() 20 { 21 glutInitDisplayMode(GLUT_RGB | GLUT_SINGLE); //什么单缓存的东西,现在不懂什么意思,就当通用条件 22 glutInitWindowPosition(100, 100); //图片出现的位置 23 glutInitWindowSize(400, 300); //图片的长和宽 24 glutCreateWindow("pb-图形学题1"); //图片的名字 25 26 glClearColor(0.0, 0.0, 0.0, 0.0); 27 glMatrixMode(GL_PROJECTION); 28 gluOrtho2D(-10000, 10000, -10000, 10000); 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 void myDisplay(void) //中点直线算法 38 { 39 glRectf(-0.5f, -0.5f, 0.5f, 0.5f); 40 glClear(GL_COLOR_BUFFER_BIT); 41 glColor3f(1.0, 0.0, 0.0); //线的颜色 42 43 int nx,ny; 44 double d; 45 len+=x; 46 d=k+0.5; 47 while (x<=len) 48 { 49 nx=x+1; 50 if (d<0) 51 { 52 d+=k; 53 ny=y; 54 } 55 else 56 { 57 d+=k-1; 58 ny=y+1; 59 } 60 setPixel(x,y,nx,ny); 61 x=nx; 62 y=ny; 63 } 64 glFlush(); //不知道什么东西,一定要写。 65 } 66 int main(int argc, char *argv[]) 67 { 68 glutInit(&argc, argv); 69 printf("请输入直线的斜率,起始点坐标,直线的长度: "); 70 scanf("%lf%d%d%d",&k,&x,&y,&len); 71 init(); //初始化数据 72 glutDisplayFunc(&myDisplay); //调用函数 73 glutMainLoop(); //开始程序 74 return 0; 75 }