zoukankan      html  css  js  c++  java
  • 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  }
  • 相关阅读:
    codevs2894、2837、1669、2503、3231
    poj2528
    HDU 1542 Atlantis(矩形面积并)
    Light OJ 1080
    陶哲轩实分析 2.2节 习题试解
    Linux多线程实践(六)使用Posix条件变量解决生产者消费者问题
    css3模糊图片
    高速掌握Lua 5.3 —— I/O库 (1)
    覆盖率測试工具gcov的前端工具_LCOV_简单介绍
    MySQL显示状态信息
  • 原文地址:https://www.cnblogs.com/pblr/p/5317364.html
Copyright © 2011-2022 走看看