《图形学》实验五:改进的Bresenham算法画直线

开发环境:

VC++6.0,OpenGL

实验内容:

使用改进的Bresenham算法画直线。

实验结果:

《图形学》实验五:改进的Bresenham算法画直线

代码:

 1 //中点Bresenham算法生成直线

 2 #include <gl/glut.h>

 3 #include <math.h>

 4 

 5 #define WIDTH    500        //窗口宽度

 6 #define HEIGHT    500        //窗口高度

 7 #define DRAWLINE ProBresenham(100,100,400,400);    //画直线

 8 

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

10 

11 void Init()    //初始化

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

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

15     

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

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

18 } 19 

20 void ProBresenham(int x0,int y0,int x1,int y1)    //改进的Bresenham算法画线

21 { 22     int x,y,dx,dy,e; 23     dx = x1-x0; 24     dy = y1-y0; 25     e = -dx; 26     x = x0; 27     y = y0; 28     while(x<=x1){ 29  glBegin(GL_POINTS); 30  glVertex2i(x,y); 31  glEnd(); 32         x++; 33         e = e+2*dy; 34         if(e>0){ 35             y++; 36             e = e-2*dx; 37  } 38  } 39 } 40 

41 void Display()    //显示函数

42 { 43     glClear(GL_COLOR_BUFFER_BIT);    //清空颜色堆栈

44     

45     DRAWLINE    //画直线

46     

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

48 } 49 

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

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

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

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

57     

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

59     Init();        //初始化

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

61     return 0; 62 }

 

Freecode : www.cnblogs.com/yym2013

你可能感兴趣的:(res)