数值微分法(DDADDADDA)

一、原理

  1. 假定直线的起点、终点分别为:(x0,y0)(x_0,y_0)(x0​,y0​),(x1,y1)(x_1,y_1)(x1​,y1​),且都为整数。

    则过端点P0(x0,y0)P_0 (x_0, y_0)P0​(x0​,y0​),P1(x1,y1)P_1(x_1, y_1)P1​(x1​,y1​)的直线段L:y=kx+bL:y=kx+bL:y=kx+b,直线斜率为:
    k=y1−y0x1−x0(x1≠x0)k=\frac{y_1-y_0}{x_1-x_0}\ (x_1\neq x_0) k=x1​−x0​y1​−y0​​ (x1​​=x0​)

  2. 假设xxx已知,即从xxx的起x0x_0x0​开始,沿xxx方向前进一个像素(步长= 1),可以计算出相应的y值。因为像素的坐标是整数,所以y值还要进行取整处理:
    y=round(y)y=round(y) y=round(y)

  3. DDADDADDA算法就是一个增量算法,即在一个迭代算法中,如果每一步的xxx、yyy值是用前一步的值加上一个增量来获得,则称为增量算法。

  4. 这种方法直观,但效率太低,因为每一步需要一次浮点乘法和一次舍入运算。

二、计算

yi+1=kxi+1+b=k(xi+Δx)+b=kxi+b+Δx=yi+kΔx\begin{aligned} y_{i+1} &= kx_{i+1}+b \\ &=k(x_i+\Delta x)+b\\ &=kx_i+b+\Delta x\\ &= y_i+k\Delta x\\ \end{aligned} \\ yi+1​​=kxi+1​+b=k(xi​+Δx)+b=kxi​+b+Δx=yi​+kΔx​

  • 当xxx每递增111,yyy递增kkk(即直线斜率),即当xi+1=xi+1x_{i+1}=x_i+1xi+1​=xi​+1时,yi+1=yi+ky_{i+1}=y_i+kyi+1​=yi​+k;
  • 取整:yi+1=round(yi+k+0.5)y_{i+1}= round(y_i+k+0.5)yi+1​=round(yi​+k+0.5);
  • 注意上述分析的算法仅适用于∣k∣≤1|k|≤1∣k∣≤1的情形。在这种情况下,xxx每增加111,yyy最多增加111。
  • 当∣k∣≥1|k|\geq 1∣k∣≥1时,yyy每增加111,xxx增加1k\frac{1}{k}k1​,之后同理。

三、举例

写出下列直线段P0(0,0)→P1(5,2)P_0(0,0)\to P_1(5,2)P0​(0,0)→P1​(5,2)所经过实际坐标。

  1. 判断kkk值,决定使用谁为增量
    k=2−05−0=0.4<1k=\frac{2-0}{5-0}=0.4<1k=5−02−0​=0.4<1,使用xxx为增量,步长为111。
  2. 计算
    xi+1=xi+1yi+1=yi+0.4\begin{aligned} x_{i+1}&=x_i+1\\ y_{i+1}&=y_i+0.4 \end{aligned} xi+1​yi+1​​=xi​+1=yi​+0.4​
    即:当xi+1=xi+1x_{i+1}=x_i+1xi+1​=xi​+1时,yi+1=yi+0.4y_{i+1}=y_i+0.4yi+1​=yi​+0.4
x y+0.5 int(y+0.5)
0 0+0.5 0
1 0.4+0.5 0
2 0.8+0.5 1
3 1.2+0.5 1
4 1.6+0.5 2
5 2.0+0.5 2
  1. 结果
    经过如下5个坐标:
    P0(0,0)、P1(1,0)、P2(2,1)、P3(3,1)、P4(4,2)、P5(5,2)P_0(0,0)、P_1(1,0)、P_2(2,1)、P_3(3,1)、P_4(4,2)、P_5(5,2)P0​(0,0)、P1​(1,0)、P2​(2,1)、P3​(3,1)、P4​(4,2)、P5​(5,2)

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

  1. MapleSim中的符号和数值求解器详解

    MapleSim基于数学软件Maple中强大的数值和符号数学引擎,提供了大量其他工具不具备的功能,例如自动生成符号形式的系统方程和实时仿真代码.符号计算正在成为最重要的新一代建模技术之一,为开发模型方 ...

  2. python中的浮点数用法_如何利用Python在运算后得到浮点数值的方法详解

    在python中进行两个整数相除的时候,在默认情况下都是只能够得到整数的值,而在需要进行对除所得的结果进行精确地求值时,想在运算后即得到浮点值,那么如何进行处理呢? 1.修改被除数的值为带小数点的形式 ...

  3. 详解mysql字段类型int(4) int(10)等区别

    一.mysql字段类型大致可以分为:数值.日期/时间.字符串 数值类型:tinyint,smallint,mediumint,int/integer,bigint,float,double,decim ...

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

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

  5. 有序标称变量(Categorical Features)编码为数值变量(Continuous Features​​​​​​​)详解及实践

    有序标称变量(Categorical Features)编码为数值变量(Continuous Features)详解及实践 有一个带顺序的分类特征(例如,高.中.低) 使用pandas DataFra ...

  6. python符号格式化设置区间_Python 数值区间处理_对interval 库的快速入门详解

    使用 Python 进行数据处理的时候,常常会遇到判断一个数是否在一个区间内的操作.我们可以使用 if else 进行判断,但是,既然使用了 Python,那我们当然是想找一下有没有现成的轮子可以用. ...

  7. python 归一化还原_对python3 一组数值的归一化处理方法详解

    1.什么是归一化: 归一化就是把一组数(大于1)化为以1为最大值,0为最小值,其余数据按百分比计算的方法.如:1,2,3.,那归一化后就是:0,0.5,1 2.归一化步骤: 如:2,4,6 (1)找出 ...

  8. python数值类型教程_Python数值类型 int、float、complex 详解

    Python数值类型 int.float.complex 详解 Python数值类型:int.float.complex 在Python程序中,int.float和complex是三种十分重要的数值类 ...

  9. python对每一列进行归一化_对python3 一组数值的归一化处理方法详解

    1.什么是归一化: 归一化就是把一组数(大于1)化为以1为最大值,0为最小值,其余数据按百分比计算的方法.如:1,2,3.,那归一化后就是:0,0.5,1 2.归一化步骤: 如:2,4,6 (1)找出 ...

最新文章

  1. 历史版本_DNF:历史版本十大经典地图,没经历过那个时代的人不会明白的
  2. 比较两个ListT是否相同
  3. Sharepoint 2010配置form认证方式(SQL账号)
  4. efcore 新特性 SaveChanges Events
  5. CNN训练模型 花卉
  6. C#LeetCode刷题之#231-2的幂(Power of Two)
  7. Response JSON数据返回
  8. Android SDK上手指南:用户交互
  9. 已触发了一个断点 vs_实现ABAP条件断点的三种方式
  10. Android底部菜单栏的两种实现方式 附完整源码
  11. mac软件下载常用经典网站
  12. 解决OneNote for Windows 10 不能打开onedrive上已有笔记本问题
  13. 抖音sdk,抖音开发api接口
  14. 【Tensorflow 报错】struct.error: 'i' format requires -2147483648 = number = 2147483647
  15. 台风怎么看内存颗粒_普条居然采用南亚A-DIE HR颗粒,光威TYPEα内存条稳超3200MHZ...
  16. C 顺序表求交集和并集
  17. C语言求最小公倍数和最大公约数三种算法(经典)----ACM
  18. 计算机具有理性和逻辑思维吗,我们的理性和逻辑思维能力真的有那么重要吗?...
  19. 小程序源码:全新独立后台修复登录在线答题-多玩法安装简单
  20. 发送网页地址确定对方ip

热门文章

  1. pareto最优解程序_NIPS 2018 | 作为多目标优化的多任务学习:寻找帕累托最优解
  2. 人与人之间在八小时之外的差别
  3. 知乎上最火的租房经验
  4. wordpress异步ajax上传文件
  5. srs ~ Simple Realtime Server ~ 流媒体解决方案。
  6. 源码解析:JUC及使用场景
  7. Openshift4.x -- 基于裸机(Bare Metal) UPI方式的集群安装(参考)
  8. Team Fundation Server 2010 五
  9. 《CCNP SWITCH 300-115学习指南》——2.1节园区网结构
  10. Qt实战小工具 -- 简易Gif制作工具