之前我们使用DDA来画线, 这种算法每步只进行一个加法运算,那么加法运算李里边有浮点数, 我们是否还可以再提高效率 也就是把浮点运算变成整数加法, 或者改变直线方程类型

中点画线算法

利用直线的一般方程 Ax + By + C = 0

对于一般直线方程,
对于直线的点, 那么 Ax + By + C = 0
对于直线上方的点, 那么 Ax + By + C > 0
对于直线下方的点, 那么 Ax + By + C < 0

每次在最大位移方向走一步, 另一个方向走还是不走,取决于中点误差的判断

假设 0 <= |k| <= 1. 因此,每次在x方向+1, y方向 是否加一需要作出判断

对于该直线, xi的位置则是 取pi, 因为交点在 yi 到y (i+1) 的中点的下方, 下一个点则是取 pu 这个点, 因为交点在中点上方

至于如何判断中点是在直线的上方还是下方
我们就把中点坐标带入到直线方程判断是否大于零, 假设中点坐标是m, 那么就是判断
di = Amx + Bmy +C 的大小, 也就是

di = A(xi + 1) + B (yi + 0.5) + C

中点画线算法需要 四个加法,两个乘法,似乎效率也并没有多高

增量计算

1. d < 0



推导可得, d1 = d0 + A + B

2. d >= 0


推导 d1 = d0 + A

3. 计算初始值d0



d0 = A + 0.5B
由于这里还是有0.5这个计算, 而且我们只需要判断d的正负号, 所以我们可以用2d来代替d计算
也就是2d0 = 2A + B这样就全都是整数了.

计算机图形学 之 中点画线算法相关推荐

  1. 【计算机图形学】中点画线法实现任意斜率直线的绘制

    [计算机图形学]中点画线法实现任意斜率直线的绘制 一.中点画线法原理简介 1.建立基础 中点画线法的建立基础是数值微分画线法(DDA),其作为改进算法,沿用了DDA算法的增量思想,针对影响DDA算法效 ...

  2. 【计算机图形学】中点画线法实现焦点在x、y轴上的椭圆绘制

    [计算机图形学]中点画线法实现焦点在x.y轴上的椭圆绘制 一.中点画线法原理简介 1.建立基础 中点画线法的原理介绍见直线绘制的博文中点画线法实现任意斜率直线的绘制.基本思路是以下一点在椭圆外/内的位 ...

  3. c语言计算机图形来画八分画圆,计算机图形学:中点画圆算法

    在平面解析几何中,圆的方程可以描述为(x – x0)2 + (y – y0)2 = R2,其中(x0, y0)是圆心坐标,R是圆的半径,特别的,当(x0, y0)就是坐标中心点时,圆方程可以简化为x2 ...

  4. 计算机图形学 学习笔记(一):概述,直线扫描转换算法:DDA,中点画线算法,Bresenham算法

    前言 本笔记基于 http://www.icourse163.org/learn/CAU-45006?tid=1001746004#/learn/announce 感谢中国农大 赵明老师的分享~ 现在 ...

  5. java实现计算机图形学中点画线算法

    代码:DrawLine.java: import javax.swing.*; import java.awt.*;public class DrawLine extends JPanel {publ ...

  6. 【计算机图形学】扫面转换算法(DDA算法 中点画线算法 Bresenham画线算法)

    模块1 扫描转换算法 一 实验目的 编写直线.弧线的光栅扫描转换算法,并对线宽与线形的算法加以探讨 用DDA算法.中点画线算法.Bresenham画线算法绘制直线(如果键盘输入数据,给出数据值:如果绘 ...

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

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

  8. 任意斜率的中点画线算法

    一.中点画线算法的基本原理 在画直线的过程中,当前像素点P(xp,yp),则下一个点与直线最接近的像素只能是P1或者P2,即P点的正右方或者右上角的点.设M(xp+1,yp+0.5)为P1与P2的中点 ...

  9. openGL实现中点画线算法、DDA画线算法,Bresenham画线算法,并进行鼠标键盘的交互

    首先设置变量用于进行鼠标交互和键盘交互: int m = 0; GLdouble m1 =0, m2 = 0; 1.实验入口主函数: //主函数 int main(int argc, char** a ...

  10. 图形学--(中点画线法+Bresenham画线算法)

    编程环境:codeblocks+EGE库 用到的函数:putpixel(int x1,int y1,int color)  用某种颜色打亮一个坐标点. 这俩种算法都是用来在计算机上画一条直线的,那么我 ...

最新文章

  1. Zepto.js库touch模块代码解析
  2. Future有返回值的线程
  3. 体制内必须要懂的道理77条
  4. vivado中如何导入ise工程
  5. HDU 1574 RP问题
  6. sublime text3的php代码合法检查
  7. 数据挖掘中的概念描述
  8. 硬件——STM32 , 录音
  9. springcloud 之服务注册与发现 Eureka Client
  10. window设置快捷键左右方向键
  11. DHCP安装授权与设置分配
  12. 少儿编程几种语言_您使用了几种编程语言?
  13. Qt程序启动画面QSplashScreen类
  14. 我要注意的Java编码规范
  15. C语言指针详解(经典,非常详细)
  16. Intel XTU 开机自启
  17. vb.net SpeechLib 播报语音封装类
  18. 开启和关闭android移动网络
  19. phython入门开始
  20. GNSS/INS组合导航(八):INS/GPS组合导航

热门文章

  1. Optisystem应用:光电检测器灵敏度建模
  2. 捷联惯导基础知识解析之二(捷联惯导更新算法和误差方程)
  3. 测试手机屏幕颜色软件,【AVW分享】一款你可以拥有的手机屏幕测试app
  4. 试试这个AI实验:把2D图像转换成3D
  5. 海康摄像头故障处理踩坑记录
  6. IFC最新标准 IFC4X3 RC2 和 IFC4X3 RC4 特点
  7. html js注册表单代码,用户注册常用javascript代码
  8. CheckedListBoxControl 赋值,取值的方法 KKK笔记
  9. 《云计算核心技术剖析》mini书
  10. MATLAB切比雪夫带通滤波器