开发环境:

VC++6.0,OpenGL

实验内容:

使用中点Bresenham算法画直线。

实验结果:

代码:

 //中点Bresenham算法生成直线
#include <gl/glut.h>
#include <math.h> #define WIDTH 500 //窗口宽度
#define HEIGHT 500 //窗口高度
#define DRAWLINE1 MidpointBresenham(100,200,200,100); //画直线
#define DRAWLINE2 MidpointBresenham(200,100,450,400); //画直线 #pragma comment(linker, "/subsystem:\"windows\" /entry:\"mainCRTStartup\"") //取消控制台 void Init() //初始化
{
glClearColor(1.0f,1.0f,1.0f,1.0f); //设置背景颜色,完全不透明
glColor3f(1.0f,0.0f,0.0f); //设置画笔颜色 glMatrixMode(GL_PROJECTION); //设置投影
gluOrtho2D(0.0, WIDTH, 0.0, HEIGHT); //设置投影区域
} void MidpointBresenham(int x0,int y0,int x1,int y1) //中点Bresenham算法画线
{
int dx,dy,d,UpIncre,DownIncre,x,y;
if(x0>x1){
x=x1;x1=x0;x0=x;
y=y1;y1=y0;y0=y;
}
x = x0,y = y0;
dx = x1-x0;
dy = y1-y0;
if(dy>&&dy<=dx){ //0<k<=1
d = dx-*dy;
UpIncre = *dx-*dy;
DownIncre = -*dy;
while(x<=x1){
glBegin(GL_POINTS);
glVertex2i(x,y);
glEnd();
x++;
if(d<){
y++;
d+=UpIncre;
}
else
d+=DownIncre;
}
}
else if((dy>=(-dx))&&dy<=) //-1<=k<=0
{
d=dx-*dy;
UpIncre=-*dy;
DownIncre=-*dx-*dy;
while(x<=x1)
{
glBegin(GL_POINTS);
glVertex2i(x,y);
glEnd();
x++;
if(d>)
{
y--;
d+=DownIncre;
}
else d+=UpIncre;
}
}
else if(dy<(-dx)) //k<-1
{
d=-dy-*dx;
UpIncre=*dx+*dy;
DownIncre=*dx;
while(y>=y1)
{
glBegin(GL_POINTS);
glVertex2i(x,y);
glEnd();
y--;
if(d<)
{
x++;
d-=UpIncre;
}
else d-=DownIncre;
}
} else //k>1和k不存在
{
d=dy-*dx;
UpIncre=*dy-*dx;
DownIncre=-*dx;
while(y<=y1)
{
glBegin(GL_POINTS);
glVertex2i(x,y);
glEnd();
y++;
if(d<)
{
x++;
d+=UpIncre;
}
else d+=DownIncre;
}
}
} void Display() //显示函数
{
glClear(GL_COLOR_BUFFER_BIT); //清空颜色堆栈 DRAWLINE1 //画直线
DRAWLINE2 //画直线 glFlush(); //清空缓冲区指令
} int main(int argc,char** argv)
{
glutInit(&argc,argv);
glutInitDisplayMode(GLUT_SINGLE | GLUT_RGB); //初始化显示模式
glutInitWindowSize(WIDTH,HEIGHT); //设置窗口尺寸
glutInitWindowPosition(,); //设置窗口位置
glutCreateWindow("画直线"); //创建窗口 glutDisplayFunc(Display); //注册显示函数
Init(); //初始化
glutMainLoop(); //进入程序循环
return ;
}

Freecode : www.cnblogs.com/yym2013

《图形学》实验四:中点Bresenham算法画直线的更多相关文章

  1. Python使用DDA算法和中点Bresenham算法画直线

    title: "Python使用DDA算法和中点Bresenham算法画直线" date: 2018-06-11T19:28:02+08:00 tags: ["图形学&q ...

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

    开发环境: VC++6.0,OpenGL 实验内容: 使用改进的Bresenham算法画直线. 实验结果: 代码: //中点Bresenham算法生成直线 #include <gl/glut.h ...

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

    开发环境: VC++6.0,OpenGL 实验内容: 使用中点Bresenham算法画椭圆. 实验结果: 代码: #include <gl/glut.h> #define WIDTH 50 ...

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

    开发环境: VC++6.0,OpenGL 实验内容: 使用中点Bresenham算法画圆. 实验结果: 代码: #include <gl/glut.h> #define WIDTH 500 ...

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

    开发环境: VC++6.0,OpenGL 实验内容: 使用DDA算法画直线. 实验结果: 代码: #include <gl/glut.h> #include <math.h> ...

  6. 利用canvas实现的中点Bresenham算法

    Bresenham提出的直线生成算法的基本原理是,每次在最大位移方向上走一步,而另一个方向是走步还是不走步取决于误差项的判别,具体的实现过程大家可以去问度娘.我主要是利用canvas画布技术实现了这个 ...

  7. 基于Bresenham算法画圆

    bresenham算法画圆思想与上篇 bresenham算法画线段 思想是一致的 画圆x^2+y^2=R^2 将他分为8个部分,如上图 1. 只要画出1中1/8圆的圆周,剩下的就可以通过对称关系画出这 ...

  8. [DEBUG]椭圆的中点Bresenham算法边缘绘制出现错误

    在使用椭圆的中点Bresenham算法绘制椭圆时, 当椭圆足够大时, 椭圆的边缘会出现下面这种情况. 出错原因: 将a, b声明为了int类型, 导致中点判别式中发生溢出 关注后面的a*b*a*b当a ...

  9. Bresenham’s algorithm( 布兰森汉姆算法)画直线

    Bresenham直线算法是用来描绘由两点所决定的直线的算法,它会算出一条线段在 n 维光栅上最接近的点.这个算法只会用到较为快速的整数加法.减法和位元移位,常用于绘制电脑画面中的直线.是计算机图形学 ...

随机推荐

  1. xp远程桌面登陆需要身份验证问题解决

    今天在客户这边部署了一个专门用于远程访问的计算机,但是系统是xp,windows服务器最新的已经到2012版本了,windows服务器从2008开始就要求远程桌面登陆支持nla,因此在使用xp登陆wi ...

  2. 7.4---加法替代运算(CC150)

    注意:1,除法那里b+=b是错的.b一直在改变.   2,仔细一点. import java.util.*; public class AddSubstitution { public int cal ...

  3. ubuntu安装文件比较工具Meld

    Meld是一款可视化的文件及目录对比(diff) / 合并 (merge) 工具,通过它你可以对两个或三个文件/目录进行对比,并以图形化的方式显示出它们的不同之处,同时还提供编辑及合并功能,另外还支持 ...

  4. GitHub访问速度慢的解决方法

    # Github 103.245.222.249 github.global.ssl.fastly.net 103.245.222.133 assets-cdn.github.com 23.235.4 ...

  5. 使用Gitosis搭建Git服务器

    使用Gitosis搭建Git服务器 作者: JeremyWei | 可以转载, 但必须以超链接形式标明文章原始出处和作者信息及版权声明 网址: http://weizhifeng.net/build- ...

  6. 【Networking】容器网络大观 && SDN 资料汇总

    SDNLAB技术分享(十五):容器网络大观   SDNLAB君• 16-06-17 •2957 人围观 编者按:本文系SDNLAB技术分享系列,本次分享来自SDN撕X群(群主:大猫猫)群直播,我们希望 ...

  7. leetcode Add and Search Word - Data structure design

    我要在这里装个逼啦 class WordDictionary(object): def __init__(self): """ initialize your data ...

  8. C#之系统自带保存属性

    源代码下载链接 程序开发很多时候需要根据运行环境做不通的参数配置,通过写ini之类的文本文件是一种方法,但这种方法也同时会把数据暴露 Winform开发中可以将需要配置的字段属性保存到程序中(其实也是 ...

  9. cas 单点登录出现org.jasig.cas.client.util.CommonUtils.getResponseFromServer - 拒绝连接 Connection refused

    cas 单点登录出现org.jasig.cas.client.util.CommonUtils.getResponseFromServer - 拒绝连接 Connection refused 环境: ...

  10. ACM/ICPC 之 暴力打表(求解欧拉回路)-编码(POJ1780)

    ///找到一个数字序列包含所有n位数(连续)一次且仅一次 ///暴力打表 ///Time:141Ms Memory:2260K #include<iostream> #include< ...