DDA算法,是根据直线的微分方程来计算△x和△y 生成直线的扫描转换算法。

下面给出一道例题,来讲解下DDA算法的计算步骤:

题目如下

解:我们按照题意画好了直线:

看成直线y=mx+b

接下来就是使用DDA算法生成像素了

首先需要得到直线的斜率m,计算方法是利用直线方程中的点斜式  变形

成  计算得到。

接着从x的左端点x1开始,向右端点x2步进,步长为一个像素,计算相应的y坐标y=mx+b;取像素点 (x, round(y)) 作为当前点的坐标(round表示四舍五),即:当x每递增1y递增m(即直线斜率):

提示:刚开始x=0,y=0.5,然后x增加1,y增加0.4(斜率),···以此类推

int(y+0.5)表示对y进行四舍五入

这样,依次得到了坐标(0,0) (1,0) (2,1) (3,1) (4,2) (5,2)

对坐标处添加像素,可得如下图像:

至此,通过DDA算法确定一组最佳逼近目标直线的像素已经完成。

        注意本题的算法仅适用于|m| ≤1的情形。在这种情况下,x每增加1, y最多增加1。 |m| >1时,必须把xy地位互换,否则会导致画出来的像素点之间跳跃幅度过大。互换即y=mx+b变成x=(1/m)(y-b),即y增加1,x增加1/m。

DDA算法伪代码(C语言):

void DDALine(int x1,int y1,int x2,int y2,int color){int x;                            float dx, dy, y, m;                 dx = x2-x1, dy=y2-y1;                    m=dy/dx, y=y1;                        for (x=x1; x<=x2; x++)                    {  SetPixel (x, int(y+0.5), color);        y=y+m;}
}

DDA算法的优缺点:

  • 优点是消除了算法中的乘法,简单易懂。
  • 缺点是有浮点数的计算,并伴随浮点数相加累积误差,对长线段而言容易引起像素点位置与理想位置的较大偏移。
  • 四舍五入操作消耗时间

DDA数值微分法详解相关推荐

  1. php 六边形 属性图 能力数值图,详解基于 Canvas 手撸一个六边形能力图

    一.前言 六边形能力图如下,由 6 个 六边形组成,每一个顶点代表其在某一方面的能力.这篇文章我们就来看看如何基于 canvas 去绘制这么一个六边形能力图.当然,你也可以基于其他开源的 js 方案来 ...

  2. Python基本语法_基本数据类型_数值型详解

    目录 目录 软件环境 Python变量调用的过程 数值型 删除一个数值类型对象 布尔型 Bool 标准整型 Int 长整型 双精度浮点型 Float 复数 数值类型对象的内建功能函数 absNumbe ...

  3. mysql数据库数字类型_Mysql 数据库数值类型详解

    MySQL 支持所有标准SQL 中的数值类型,其中包括严格数值类型(INTEGER.SMALLINT.DECIMAL 和NUMERIC),以及近似数值数据类型(FLOAT.REAL 和DOUBLE P ...

  4. Python数据类型——数值型详解

    上一篇文章:Python的变量和数据类型 用Python画的滑稽脸  这是我之前用Python的 turtle库画的一个滑稽脸的视频,如果想要源码的话可以看我之前的博客: 如何用Python画QQ表情 ...

  5. pg时间戳怎么入oracle库,Oracle与PostgreSQL中Timestamp型公元前、后数值的详解及JDBC存取...

    字段:date value1: 2010-01-01 value2: 2010-01-01BC 1.直接向数据库插入数值时: oracle需要使用to_timestamp('2010-01-01',' ...

  6. DDA(数值微分法)绘制直线(C++,VS2019)

    1.DDA(Digital Differential Analyzer)算法 DDA算法是计算机图形学中最简单的绘制直线算法. 已知直线段两个端点P0(x0,y0),P1(x1,y1). 则可求得直线 ...

  7. Modbus Tcp通信格式详解

    Modbus TCP  03功能码 读取一个或多个保持寄存器的数值 读取连续三个保持寄存器的数值 (40001=1000.40002=5000.40003=650) 发送:00 00 00 00 00 ...

  8. mysql数据库字段类型大全_mysql数据库字段类型详解

    MySQL支持大量的列类型,它可以被分为3类:数字类型.日期和时间类型以及字符串(字符)类型.本节首先给出可用类型的一个概述,并且总结每个列类型的存储需求,然后提供每个类中的类型性质的更详细的描述. ...

  9. 数值微分法(DDA)详解

    数值微分法(DDADDADDA) 一.原理 假定直线的起点.终点分别为:(x0,y0)(x_0,y_0)(x0​,y0​),(x1,y1)(x_1,y_1)(x1​,y1​),且都为整数. 则过端点P ...

  10. DDA画线算法+代码详解-直线扫描算法之一

    #DDA画线算法+代码详解-直线扫描算法之一 本文目录结构如下 1.直线扫描算法简介 2.DDA直线扫描算法 2.1 公式推理 1.求斜率K: 2.当|K| <= 1 时 3.当|K| > ...

最新文章

  1. 【NeurIPS2019】Yoshua Bengio报告:深度学习系统从1代到2代
  2. 小型荧光驱动电路实验电路
  3. ncre计算机二级教程版本,计算机二级 NCRE教程word.pdf
  4. 《HTML5 Canvas开发详解》——1.7 2D上下文及其当前状态
  5. 深入了解UIAutomation 的API
  6. Angulary应用依赖里的zone.js
  7. centos8 kernel source 安装_什么?你在物理机上安装Oracle总失败?那就试试Docker吧
  8. ~~~~~~~~~~~~~~坏公司鉴别方法 ~~~~~~~~~~~
  9. asp.net 下载文件
  10. .NET-MVC站点部署到windows server2008r2服务器404错误
  11. MySQL5.5安装和navicat安装配置图解
  12. 戴尔t310服务器装系统步骤,dell笔记本重装系统教程
  13. C++——输入、输出和文件
  14. 即时通讯软件调查报告
  15. 加密机是如何工作的_什么是加密,它如何工作?
  16. 机器学习:Sklearn算法选择路径图
  17. ff14最新服务器人数,FF14第一波转服过后 现各服务器人口状况
  18. python从第二行开始读取文件_python学习笔记—— 从第二行开始读文件
  19. SQL Server 安全篇——SQL Server 安全模型(1)——安全性主体层级
  20. JAVA进阶案例 TCP编程之网络聊天工具(客户端)

热门文章

  1. 金庸15部小说精校版
  2. 淘宝店铺固定背景代码
  3. ttc文件linux安装,Linux当中如何安装字体?
  4. 计算机的各种配件知识,菜鸟必读:DIY装机需要知道的一些配件小知识
  5. arcmap新手教程_ArcGIS入门教程(1)——ArcMap应用基础
  6. c语言代码 txt下载,贪吃蛇C语言代码.txt
  7. 固高运动控制器,c#代码,支持gt400/800
  8. 高等数学学习笔记——第十讲——子数列与聚点原理(1. 数列收敛的归并性)
  9. LinkedIn 启用俄勒冈数据中心
  10. CAN详解--各家CAN分析仪与软件的比较