参考:Bresenham 画线算法推导过程_在到处之间找我-CSDN博客_bresenham画线算法今天复习这个算法的时候,有一点没有立马反应过来,故特此记此篇博客作为备忘。文章目录描点原理用 $p_i$ 代替 $d_1 - d_2$$p_i$ 递推如何确定 $p_1$ 呢?程序代码描点原理原理就是描实距离D点最近的那个点,距离的判断通过判断d1和d2的大小来确定。d1大,说明距离(xi+1,yi)(x_i + 1, y_i)(xi​+1,yi​)更远,要描实(xi+1,yi+1)(x_i...https://blog.csdn.net/sinat_41104353/article/details/82858375

代码实现

void Canvas::drawLine(intV2 pt1, intV2 pt2, RGBA _color){int disY = abs(pt2.y - pt1.y); // △yint disX = abs(pt2.x - pt1.x);  // △x// 直线的斜率 k = △y / △xint xNow = pt1.x;int yNow = pt1.y;int stepX = 0;int stepY = 0;//判断2个方向步进的正负pt1.x < pt2.x ? stepX = 1 : stepX = -1;pt1.y < pt2.y ? stepY = 1 : stepY = -1;//对比xy偏移量,决定步进的方向选取x or yint sumStep = disX;         //默认步进方向为x方向,步进总数为 △xbool useXStep = true;//斜率与1进行对比,如果斜率大于1,则使用y方向进行步进if (disX < disY) {sumStep = disY;useXStep = false;SWAP_INT(disX, disY)}/*Bresenham 算法结论:0、P_1 = 2△y - △x1、P_i >= 0y_(i+1) = y_i + 1P_(i+1) = P_i + 2(△y - △x)2、P_i < 0y_(i+1) = y_iP_(i+1) = P_i + 2△y*///初始化P值int p = 2 * disY - disX;//算法for (int i = 0; i < sumStep; i++) {drawPoint(xNow, yNow, _color);if (p >= 0) {if (useXStep) {yNow += stepY;}else {xNow += stepX;}p = p /*+ 2* disY*/ - 2 * disX;}//步进主坐标useXStep ? xNow += stepX : yNow += stepY;//计算下一点的判别式p = p + 2 * disY;}}

Bresenham 算法画直线相关推荐

  1. 计算机图形学E2——OpenGL Bresenham算法画直线

    其他计算机图形学实验见 链接 要求 使用Bresemham算法画直线,并且通过鼠标可以实现交互操作 参考代码: 代码1 代码2 代码3(代码好理解) 代码4(讲解很全面) #include<io ...

  2. 【计算机图形学】基于OpenGL的中点Bresenham算法画直线

    学习过三种画直线的方法(DDA.中点Bresenham算法.改进的中点Bresenham算法)后,想着实际操作一下如何能够实现,OpenGL无疑是很好的选择,在老师的推荐下,我尝试着用OpenGL来实 ...

  3. 布兰森汉姆画圆matlab,bresenham算法画直线

    实验一名称:基本图形的生成算法 要求:(1)掌握 DDA 生成线段算法 (2)掌握 Bresenham 生成线段算法 (3)掌握生成圆弧算法 1. 代码 (1) Bresenham 画线算法 v 实验 ...

  4. Bresenham算法画直线

    本博客仅限于斜率在0~1之间的直线 原算法 设直线起始点坐标为(xs,ys),均为整数,即 x1 = xs, y1 = ys e(x2) = y2 - y1 - 0.5 = m - 0.5 终点坐标为 ...

  5. java 2d划线 刷子_Java图形设计中,利用Bresenham算法实现直线线型,线宽的控制(NO2DGRAPHICS)...

    Java图形设计中,利用Bresenham算法实现直线线型,线宽的控制(NO2DGRAPHICS) (2007-04-05 23:37:39) Java 2D Graphics提供了强大的画线功能,可 ...

  6. 使用openGL,用Bresenham算法画椭圆

    运行结果 源代码 //用Bresenham算法画椭圆 #include<iostream> #include<stdlib.h> #include <GL/glut.h& ...

  7. Bresenham快速画直线算法

    现在的计算机的图像的都是用像素表示的,无论是点.直线.圆或其他图形最终都会以点的形式显示.人们看到屏幕的直线只不过是模拟出来的,人眼不能分辨出来而已.那么计算机是如何画直线的呢,其实有比较多的算法,这 ...

  8. Bresenham改进算法结合wu反走样算法画直线

    自己打造了CLine画直线类 1.CP2类 定义了点类 class CP2 { public:CRGB clr;double y;double x;CP2();CP2(double,double,CR ...

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

    简介 1967年,IBM的J.Bresenham提出了Bresenham算法.     Bresenham算法是在一些约定条件下的最佳逼近.     Bresenham算法通过前一个像素点提供的信息来 ...

最新文章

  1. CentOS挂Windows的NFS备忘
  2. 哈佛博士后入职街道办引关注,官方最新回应
  3. mac系统在云服务器地址,mac如何登陆云服务器地址
  4. 区块链 Fisco bcos 智能合约(12)-Solidity的基础特性
  5. 盘古搜索:上市是既定策略 寻求股权多元化
  6. springboot酒店客房管理系统设计
  7. 君莫笑系列视频学习(2)
  8. C#对.CSV格式的文件--逗号分隔值文件 的读写操作及上传ftp服务器操作方法总结
  9. 你不知道的京东数据库运维自动化体系建设之路
  10. CT前瞻(三):Adobe系列XD软件绘制简单的原型图与交互设计
  11. 【转】人家在美国怎么过的,7年,我无比惭愧
  12. 电力电子器件的系统组成和分类
  13. 网站建设之邮件发送形式
  14. C++ 单引号和双引号区别
  15. 云计算 Spark实验
  16. 基于Jenkins的DevOps流水线实践教程|2020全新制作|端到到研发效能提升
  17. 东南大学计算机专业研究生复试,东南大学计算机考研复试经验
  18. 优思学院:六西格玛设计的五步法 - DMADV
  19. 如何将立创商城的原理图符号和封装导入AD中
  20. 联想LJ2405激光打印机打印速度慢的解决方法

热门文章

  1. 全球及中国镍铬薄膜电阻器市场需求量调研及未来发展趋势预测报告2022-2027年
  2. 直接替换Springboot jar包中的文件
  3. Excel根据表格内容批量导入图片到单元格批注
  4. 通过Request获取客户端的真实IP
  5. 结城浩 java_JAVA多线程设计模式 结城浩著 PDF下载
  6. 知名著者结城浩:坚持做一件事而不厌倦,一旦厌倦马上更换目标
  7. Java服务端处理音频
  8. linux posix支持中文,如何在Linux中使用POSIX方法从文件中读取Unicode-16字符串?
  9. python hexdump_细说Linux中怎么用hexdump命令
  10. 使用XML、XSLT和XPath创建可排序、分页、重用的数据显示页