DDA数值微分法详解
DDA算法,是根据直线的微分方程来计算△x和△y 生成直线的扫描转换算法。
下面给出一道例题,来讲解下DDA算法的计算步骤:
题目如下
解:我们按照题意画好了直线:
接下来就是使用DDA算法生成像素了
首先需要得到直线的斜率m,计算方法是利用直线方程中的点斜式 变形
成 计算得到。
接着从x的左端点x1开始,向右端点x2步进,步长为一个像素,计算相应的y坐标y=mx+b;取像素点 (x, round(y)) 作为当前点的坐标(round表示四舍五入),即:当x每递增1,y递增m(即直线斜率):
提示:刚开始x=0,y=0.5,然后x增加1,y增加0.4(斜率),···以此类推
这样,依次得到了坐标(0,0) (1,0) (2,1) (3,1) (4,2) (5,2)。
对坐标处添加像素,可得如下图像:
至此,通过DDA算法确定一组最佳逼近目标直线的像素已经完成。
注意本题的算法仅适用于|m| ≤1的情形。在这种情况下,x每增加1, y最多增加1。当 |m| >1时,必须把x,y地位互换,否则会导致画出来的像素点之间跳跃幅度过大。互换即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数值微分法详解相关推荐
- php 六边形 属性图 能力数值图,详解基于 Canvas 手撸一个六边形能力图
一.前言 六边形能力图如下,由 6 个 六边形组成,每一个顶点代表其在某一方面的能力.这篇文章我们就来看看如何基于 canvas 去绘制这么一个六边形能力图.当然,你也可以基于其他开源的 js 方案来 ...
- Python基本语法_基本数据类型_数值型详解
目录 目录 软件环境 Python变量调用的过程 数值型 删除一个数值类型对象 布尔型 Bool 标准整型 Int 长整型 双精度浮点型 Float 复数 数值类型对象的内建功能函数 absNumbe ...
- mysql数据库数字类型_Mysql 数据库数值类型详解
MySQL 支持所有标准SQL 中的数值类型,其中包括严格数值类型(INTEGER.SMALLINT.DECIMAL 和NUMERIC),以及近似数值数据类型(FLOAT.REAL 和DOUBLE P ...
- Python数据类型——数值型详解
上一篇文章:Python的变量和数据类型 用Python画的滑稽脸 这是我之前用Python的 turtle库画的一个滑稽脸的视频,如果想要源码的话可以看我之前的博客: 如何用Python画QQ表情 ...
- pg时间戳怎么入oracle库,Oracle与PostgreSQL中Timestamp型公元前、后数值的详解及JDBC存取...
字段:date value1: 2010-01-01 value2: 2010-01-01BC 1.直接向数据库插入数值时: oracle需要使用to_timestamp('2010-01-01',' ...
- DDA(数值微分法)绘制直线(C++,VS2019)
1.DDA(Digital Differential Analyzer)算法 DDA算法是计算机图形学中最简单的绘制直线算法. 已知直线段两个端点P0(x0,y0),P1(x1,y1). 则可求得直线 ...
- Modbus Tcp通信格式详解
Modbus TCP 03功能码 读取一个或多个保持寄存器的数值 读取连续三个保持寄存器的数值 (40001=1000.40002=5000.40003=650) 发送:00 00 00 00 00 ...
- mysql数据库字段类型大全_mysql数据库字段类型详解
MySQL支持大量的列类型,它可以被分为3类:数字类型.日期和时间类型以及字符串(字符)类型.本节首先给出可用类型的一个概述,并且总结每个列类型的存储需求,然后提供每个类中的类型性质的更详细的描述. ...
- 数值微分法(DDA)详解
数值微分法(DDADDADDA) 一.原理 假定直线的起点.终点分别为:(x0,y0)(x_0,y_0)(x0,y0),(x1,y1)(x_1,y_1)(x1,y1),且都为整数. 则过端点P ...
- DDA画线算法+代码详解-直线扫描算法之一
#DDA画线算法+代码详解-直线扫描算法之一 本文目录结构如下 1.直线扫描算法简介 2.DDA直线扫描算法 2.1 公式推理 1.求斜率K: 2.当|K| <= 1 时 3.当|K| > ...
最新文章
- 【NeurIPS2019】Yoshua Bengio报告:深度学习系统从1代到2代
- 小型荧光驱动电路实验电路
- ncre计算机二级教程版本,计算机二级 NCRE教程word.pdf
- 《HTML5 Canvas开发详解》——1.7 2D上下文及其当前状态
- 深入了解UIAutomation 的API
- Angulary应用依赖里的zone.js
- centos8 kernel source 安装_什么?你在物理机上安装Oracle总失败?那就试试Docker吧
- ~~~~~~~~~~~~~~坏公司鉴别方法 ~~~~~~~~~~~
- asp.net 下载文件
- .NET-MVC站点部署到windows server2008r2服务器404错误
- MySQL5.5安装和navicat安装配置图解
- 戴尔t310服务器装系统步骤,dell笔记本重装系统教程
- C++——输入、输出和文件
- 即时通讯软件调查报告
- 加密机是如何工作的_什么是加密,它如何工作?
- 机器学习:Sklearn算法选择路径图
- ff14最新服务器人数,FF14第一波转服过后 现各服务器人口状况
- python从第二行开始读取文件_python学习笔记—— 从第二行开始读文件
- SQL Server 安全篇——SQL Server 安全模型(1)——安全性主体层级
- JAVA进阶案例 TCP编程之网络聊天工具(客户端)