《图形学》实验五:改进的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

时间: 2024-08-07 13:42:49

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

《图形学》实验四:中点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 DRAWLINE1 MidpointBresenham(100,200,200,100); //画直线 8

《图形学》实验七:中点Bresenham算法画椭圆

开发环境: VC++6.0,OpenGL 实验内容: 使用中点Bresenham算法画椭圆. 实验结果: 代码: 1 #include <gl/glut.h> 2 3 #define WIDTH 500 4 #define HEIGHT 500 5 #define OFFSET 15 //偏移量,偏移到原点 6 #define A 6 7 #define B 5 8 9 void Init() //其它初始化 10 { 11 glClearColor(1.0f,1.0f,1.0f,1.0f);

《图形学》实验六:中点Bresenham算法画圆

开发环境: VC++6.0,OpenGL 实验内容: 使用中点Bresenham算法画圆. 实验结果: 代码: 1 #include <gl/glut.h> 2 3 #define WIDTH 500 4 #define HEIGHT 500 5 #define OFFSET 15 6 #define R 8 7 8 void Init() //其它初始化 9 { 10 glClearColor(1.0f,1.0f,1.0f,1.0f); //设置背景颜色,完全不透明 11 glColor3f

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

开发环境: VC++6.0,OpenGL 实验内容: 使用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,

Assignment 3 在OpenGL中使用Bresenham算法画圆

一.      任务目标 利用OpenGL,实现Bresenham算法画圆. 二.      任务要求 使用整数来确定点的位置. 标出圆心.(不太明白show的含义,于是我在圆心处画了一个点来表示.) 使用至少16个点表示一个圆. 三.      使用平台 Windows 8.1 Visual Studio 2012 四.      实现简述 与Bresenham直线算法类似,采用的是中点画圆算法. 定义圆的一个函数 可根据f(x, y)符号判断点(x, y)的位置: 于是假设点pi(xi, y

Bresenham算法画填充圆及SDL代码实现

画圆是计算机图形操作中一个非常重要的需求.普通的画圆算法需要大量的浮点数参与运算,而众所周知,浮点数的运算速度远低于整形数.而最终屏幕上影射的像素的坐标均为整形,不可能是连续的线,所以浮点数运算其实纯属浪费.下面介绍的Bresenham算法就是根据上文的原理设计.该算法原应用于直线的绘制,但由于圆的八分对称性,该算法也适用与圆(曲线图形)的绘制. 该算法主要是这样的原理:找出一个1/8的圆弧,用快速的增量计算找出下一个点.同时利用圆的八分对称性,找出8个点(包括该点),进行绘制. 这里给出示例的

Bresenham快速画直线算法

现在的计算机的图像的都是用像素表示的,无论是点.直线.圆或其他图形最终都会以点的形式显示.人们看到屏幕的直线只不过是模拟出来的,人眼不能分辨出来而已.那么计算机是如何画直线的呢,其实有比较多的算法,这里讲的是Bresenham的算法,是光栅化的画直线算法.直线光栅化是指用像素点来模拟直线,比如下图用蓝色的像素点来模拟红色的直线 给定两个点起点P1(x1, y1), P2(x2, y2),如何画它们直连的直线呢,即是如何得到上图所示的蓝色的点.假设直线的斜率0<k>0,直线在第一象限,Brese

Unity实现任意两点之间画一条直线——bresenham算法(直线的处理)

在家里闲着没事,在网上看到一个好玩的需求,在亮点之间画一条直线. 听起来很简单,unity就提供了很多的API,不过大部分是以屏幕画一条线类似的方式做的.如果我们需要让部队等 一个集群排列成一条斜线呢? 其实这也和屏幕渲染一条直线的道理是一样的. 屏幕要画一条直线的话,其实也是在屏幕的像素坐标系里面x,y进行赋值,把连续数转换成离散数,放大看的时候,就会看到一条直线其实是一条梯子状的线. 在实际的场景中可以把我们的地图当成一个屏幕,地图最小格子单位当成一个屏幕的像素点,这样就相当于构建了一套屏幕

Bresenham算法

1 /************************************************************* 2 pb-图形学题2 3 Bresenham算法 4 用Bresenham算法画出0<k<1区间的直线,再对称到其它所有k 5 斜率的直线 6 7 *************************************************************/ 8 9 10 #include <GL/glut.h> 11 #include&l