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

时间:2021-08-28 09:50:47

开发环境:

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