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

开发环境:

VC++6.0,OpenGL

实验内容:

使用改进的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

原文地址:https://www.cnblogs.com/yym2013/p/4619269.html