bresenham算法是一种光栅化的直线生成算法,是计算机图形学目前使用广泛的直线扫描转换算法,具体逻辑很简单,就是描点。所以bresenham的算法研究实际上是研究目标点的选择。

实验环境:

openGL,visual studio 2019

算法原理:

设直线方程为y=kx+b,误差项为d并初始化为0。则每当x每增加1时,y的值是否增加1取决于d与0.5比较的大小,由y=k(x+1)+b得y的增量为斜率k,故d=d+k。当d大于等于0.5时,下一像素点取值为右上方的点(x+1,y+1),当d小于0.5时,则取下一像素点为(x+1,y)。设e=d-0.5,上述比较等同于e与0的比较。当e大于0,置新的e=e-1,当e小于0,e=e+k。

一些改进:

在上述算法过程计算直线斜率和误差项时使用了小数和除法,可以令e’=2*e*dx这样改用整数避免除法。比较e大于等于0时e=e+2*dy,小于0时e=e-2*dx。

完整代码:

#include<iostream>
#include <GL/glut.h>
#include <math.h>
using namespace std;
float Bres_Line(int x1, int y1, int x2, int y2)
{int i, x, y, dx, dy, e;dx = abs(x2 - x1);dy = abs(y2 - y1);if (dx > dy){swap(x1, y1);swap(x2, y2);dx = abs(x2 - x1);dy = abs(y2 - y1);}int k = dy / dx;e = -0.5;x = x1;y = y1;for (i = 0; i <= dx; i++){glVertex2f(x, y);x++;e = e + k;if (e >= 0){y = y + 1;e = e - 1;}}return x, y;
}void myDisplay(){glBegin(GL_LINES);glColor3f(0.0, 1.0, 0.0);  Bres_Line(300, 200, 100, 100);glEnd();glFlush();}void Init()
{glClearColor(0.0, 0.0, 0.0, 0.0);glShadeModel(GL_FLAT);
}void Reshape(int w, int h){glViewport(0, 0, (GLsizei)w, (GLsizei)h);glMatrixMode(GL_PROJECTION);glLoadIdentity();gluOrtho2D(0.0, (GLdouble)w, 0.0, (GLdouble)h);}int main(int argc, char* argv[]){glutInit(&argc,argv);glutInitDisplayMode(GLUT_RGB | GLUT_SINGLE);glutInitWindowPosition(300, 300);glutInitWindowSize(500, 500);glutCreateWindow(" ");Init();glutDisplayFunc(myDisplay);glutReshapeFunc(Reshape);glutMainLoop();return 0;}

计算机图形学 Bresenham直线生成算法相关推荐

  1. 计算机图形学-基本图形生成算法

    基本图形生成算法 图元扫描转换 直线段扫描转换 圆弧扫描转换 实区域填充 图形的剪裁 图形反走样 消隐 光栅化算法 线段光栅化算法     DDA算法 中点Bresenham画线算法 Bresenha ...

  2. Bresenham直线生成算法详解

    基本思想 比较从理想直线到位于直线上方的像素的距离t和相邻的位于直线下方的像素的距离s,根据距 离误差项的符号确定与理想直线最近的像素,如下图所示: 简言之就是判断t和s哪个点距离直线更近 判断 s- ...

  3. 计算机图形学直线算法论文,《计算机图形学》中直线生成算法的教学心得

    摘要:<计算机图形学>是计算机科学与技术专业一门重要的专业课,其中直线生成算法是教学重点之一.该文通过分析几种直线生成算法的特点,阐述了理论教学和实践教学的重点和难点,总结了教学的体会和心 ...

  4. 计算机图形学:直线段的生成算法,VS实现数值微分法和中点Bresenham算法

    实验要求: 实现直线段生成的两种方法: 1) 数值微分法 和 2) 中点Bresenham算法.用户用鼠标点击两个点,两个点都确定后,利用直线段的绘制算法绘制两个点之间的一条直线段.本文章仅涉及算法的 ...

  5. 计算机图形学直线算法程序,计算机图形学直线生成算法实现.doc

    计算机图形学直线生成算法实现.doc (7页) 本资源提供全文预览,点击全文预览即可全文预览,如果喜欢文档就下载吧,查找使用更方便哦! 9.9 积分 实验二直线生成算法实现班级08信计学号80姓名 ...

  6. 计算机图形学01:直线生成算法(DDA算法)

    作者:非妃是公主 专栏:<计算机图形学> 博客地址:https://blog.csdn.net/myf_666 个性签:顺境不惰,逆境不馁,以心制境,万事可成.--曾国藩 文章目录 专栏推 ...

  7. DDA直线生成算法|MFC|计算机图形学

    DDA直线生成算法|MFC|计算机图形学|保姆篇 1.如何创建MFC编译环境? 点击工具->获取工具和功能 2.创建MFC编辑窗口 3.进入到MFC编辑窗口后 1)设计窗口,修改ID 2)添加事 ...

  8. 图形学画直线c语言,002计算机图形学之直线画线算法

    002计算机图形学之直线画线算法 我们知道直线方程的斜截式是如下的样子: y = kx +b 在显示器上显示直线的话,如果使用如上的方程,每描一个点 需要进行一次浮点乘法,一次浮点加法,和取整操作. ...

  9. 计算机图形学---DDA直线画法c#实现

    计算机图形学-DDA直线画法c#实现 DDA直线画法,即数值微分法,是计算机图形学中直线段扫描转换的经典算法之一,本篇文章将简单介绍DDA算法,并给出c#实现的代码. 一.DDA直线画法 设直线的斜截 ...

最新文章

  1. 美国国安局承包商被捕,被刑事指控盗窃机密
  2. 成功解决pandas.core.frame.DataFrame格式数据与numpy.ndarray格式数据不一致导致无法运算问题
  3. 北京内推 | 微软亚洲研究院MSRA STCA招聘多模态算法实习生
  4. mulitpartfile怎么接收不到值_光端机电源正常,但是运行不了怎么办?
  5. 缺失值填充1——缺失值查看、确定值填充、参考值填充
  6. 复杂性思维第二版 二、图
  7. 写一个Windows上的守护进程(7)捕获异常并生成dump
  8. nacl溶解度_运用溶解度曲线判断混合物分离、提纯的方法
  9. 笔记:vue项目中引用百度地图,地图空白现象
  10. 相机参数及坐标系变换关系(增补)
  11. 管理例程——数据库管理员
  12. viewport原理和使用和设置移动端自适应的方法(移动适应电脑)
  13. 怎么看外文文献的影响因子_怎么看文章的影响因子?
  14. 黑苹果10.14版本n卡安装以及声卡驱动
  15. excel 度分秒转度
  16. 【OpenGL ES】纹理
  17. 肇事逃逸人会受到什么处罚
  18. 网易有道一面9.16(45min)
  19. centos7.9使用gn+ninja编译程序
  20. 基于C++的数据结构-1

热门文章

  1. 虚拟机查看MySQL端口号
  2. 大学计算机基础章节测试参考答案,《大学计算机基础)》章节测试答案.docx
  3. 更改Oracle数据库Schema名称
  4. 第十三届蓝桥杯C++B组j国赛
  5. STM32_ADC模块及针对芯片MAX40056FAUA/V+的使用
  6. 机器学习 泰坦尼克号——灾难中的机器学习
  7. oracle19C冷热数据隔离,浅谈Oracle Database 19c
  8. java心跳机制_Java 心跳机制实现 DOM
  9. 【Linux基础】查看十六进制hexdump
  10. [渲染层网络层错误]导致图片无法成功加载显示 (HTTP/1.1 500 Internal Server Error)