《图形学》实验三:DDA算法画直线

开发环境:

VC++6.0,OpenGL

实验内容:

使用DDA算法画直线。

实验结果:

《图形学》实验三:DDA算法画直线

代码:

 1 #include <gl/glut.h>

 2 #include <math.h>

 3 

 4 #define WIDTH    500        //窗口宽度

 5 #define HEIGHT    500        //窗口高度

 6 

 7 #define DRAWLINE1 DDALine(100,200,200,100);    //画直线

 8 #define DRAWLINE2 DDALine(200,100,450,400);    //画直线

 9 

10 #pragma comment(linker, "/subsystem:\"windows\" /entry:\"mainCRTStartup\"")        //取消控制台

11 

12 void Init()    //初始化

13 { 14     glClearColor(1.0f,1.0f,1.0f,1.0f);    //设置背景颜色,完全不透明

15     glColor3f(1.0f,0.0f,0.0f);    //设置画笔颜色

16 

17     glMatrixMode(GL_PROJECTION);            //设置投影

18     gluOrtho2D(0.0, WIDTH, 0.0, HEIGHT);    //设置投影区域

19 } 20 

21 void DDALine(int x0,int y0,int x1,int y1)    //DDA算法画线

22 { 23     int dx,dy,eps1,i; 24     float x,y,xIncre,yIncre; 25     dx = x1-x0; 26     dy = y1-y0; 27     x = x0,y = y0; 28     if(abs(dx)>abs(dy)) 29         eps1 = abs(dx); 30     else 

31         eps1 = abs(dy); 32     xIncre = (float)dx / float(eps1); 33     yIncre = (float)dy / float(eps1); 34     for(i=0;i<=eps1;i++){ 35  glBegin(GL_POINTS); 36         glVertex2i(int(x+0.5),int(y+0.5)); 37  glEnd(); 38         x+=xIncre; 39         y+=yIncre; 40  } 41 } 42 

43 void Display()    //显示函数

44 { 45     glClear(GL_COLOR_BUFFER_BIT);    //清空颜色堆栈

46 

47  DRAWLINE1 48  DRAWLINE2 49 

50     glFlush();    //清空缓冲区指令

51 } 52 

53 int main(int argc,char** argv) 54 { 55     glutInit(&argc,argv); 56     glutInitDisplayMode(GLUT_SINGLE | GLUT_RGB);    //初始化显示模式

57     glutInitWindowSize(WIDTH,HEIGHT);    //设置窗口尺寸

58     glutInitWindowPosition(200,100);    //设置窗口位置

59     glutCreateWindow("画直线");    //创建窗口

60 

61     glutDisplayFunc(Display);    //注册显示函数

62     Init();        //初始化

63     glutMainLoop();    //进入程序循环

64     return 0; 65 }

 

Freecode : www.cnblogs.com/yym2013

 

你可能感兴趣的:(算法)