OpenGL之中点划直线(y=kx+b)

 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  }
原文地址:https://www.cnblogs.com/pblr/p/5317364.html