一.DDA算法

直线在数学上是由无数个点构成,但是由于计算机显示器是由有限个像素点组成。因此需要用有限个点去逼近无限个点,以实现直线在屏幕上显示。如下图所示,绿色线段为理想线段,黑色像素点为逼近的线段。

1.由于像素点的离散性,在x方向上,每次增量为,则直线段上前一个点与后一个点具有以下关系。

若已知直线段上一个点的坐标以及直线段斜率k,则可根据的关系推演出下一个点的y坐标。这样做的优点是:仅可通过加法运算即可得到每一个y值,提升运算效率。

2.将得到的值四舍五入,用以确定y方向上哪一个像素点被点亮。具体做法为向下取整。

二.例题推导

上图为11×11的像素点,以A点为原点建立直角坐标系,两坐标分别为A(0,0)、B(10,8)。根据A、B两点得出直线方程式:

x 0 1 2 3 4 5 6 7 8 9 10
y 0 0.8 1.6 2.4 3.2 4.0 4.8 5.6 6.4 7.2 8
int(y+0.5) 0 1 2 2 3 4 5 6 6 7 8

最终将对应的像素点改成黑色即完成直线段的逼近。

三.拓展

左图中直线段逼近结果仅有4个像素点,逼近效果差。究其原因是斜率k太大导致每变化1个单位,变化幅度大,导致像素点离散。改进的方法是将直线方程改写成,通过每变化一个单位求其x值进行值逼近,逼近效果如右图所示。

结论:当斜率k的取值范围为[-1,1],则通过方程式逼近。当斜率k范围为(1,+∞]U[-∞,-1)时,通过方程式逼近。

直线绘制算法-数值微分法(DDA)相关推荐

  1. 计算机图形学算法【1】——直线画法(数值微分法)

    计算机图形学算法[1]--直线画法(数值微分法) 以下所有代码均在VS2010下的MFC框架下使用 DDA(数值微分法)介绍 一.基本原理 通过计算直线的斜率k和截距b,y = kx+b 1.计算起点 ...

  2. 直线绘制算法-Bresenham算法

    该算法相较于其他直线绘制算法摆脱了直线方程式的使用,通过换元的思想实现整数加法的迭代. 一.Bresenham算法 前提条件k∈[0,1],直线在x方向上每次增量为,在y方向上每次的增量为.通过一个变 ...

  3. 计算机图形学 之 DDA直线算法(数值微分法)

    1. 直线段的扫描转换算法 在数学上,直线就是由无穷多个点组成的, 在计算机屏幕显示的话, 需要做一些处理,对于光栅显示器 光栅显示器上就是用有限多个点去逼近直线, 那么这些有限个点,我们需要知道每一 ...

  4. c++三种直线绘制算法

    #include <graphics.h> //包含EGE的头文件 void DDAline(int x1, int y1, int x2, int y2, int color) {int ...

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

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

  6. 图形学(2)光栅图形学的直线绘制(上)

    本模块内容绝大部分是在慕课上看中国农业大学网客时的笔记,因此算作转载,在此鸣谢赵明.李振波两位老师,感谢他们录制该门课程供大家学习! 光栅图形学 为适应光栅显示器,需发展一套和他相适应的算法来处理.显 ...

  7. 图形学(3)光栅图形学的直线绘制(下)

    本模块内容绝大部分是在慕课上看中国农业大学网客时的笔记,因此算作转载,在此鸣谢赵明.李振波两位老师,感谢他们录制该门课程供大家学习! Bresenham算法 前两种算法把效率提高到了整数加法级别,只讲 ...

  8. 数值微分法绘制直线c语言,OpenGL数值微分法(DDA)画直线

    DDA算法,是计算机图形学中一种基于直线的微分方程来生成直线的方法,由于有浮点数运算与取整,该算法不利于硬件实现. 其主要思想是由直线公式y = kx + b推导出来的. 我们已知直线段两个端点P0( ...

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

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

  10. 计算机图形学01:直线生成算法(DDA算法)

    作者:非妃是公主 专栏:<计算机图形学> 博客地址:https://blog.csdn.net/myf_666 个性签:顺境不惰,逆境不馁,以心制境,万事可成.--曾国藩 文章目录 专栏推 ...

最新文章

  1. 计算机视觉 专业术语,计算机视觉专业相关术语中英文对照5
  2. [声明]关于春节回家期间不能更新Blog的说明
  3. 人脸识别算法初次了解
  4. c语言源码转流程图工具_C语言学习路线 (详细)
  5. 网格布局每个网格都能放置一个组件_Android综合试题
  6. gcp devops_将GCP AI平台笔记本用作可重现的数据科学环境
  7. [css] word-wrap、word-break和white-space有什么区别?
  8. Laravel框架一:原理机制篇
  9. Gompertz模型绘图 matlab,Logistic模型matlab求解
  10. linux下的c语言编程实验4,实验四-Linux下的C语言编程
  11. es和oracle,Oracle和Elasticsearch数据同步
  12. 如何使用Python给Excel写入数据
  13. 2011 9 11最新过QQ游戏检测Cheat Engine(CE)搜索数据
  14. 我喜欢的学科计算机 英文作文,我喜欢的学科写英语作文40字
  15. CODEVS1296
  16. Android自动更新时间去除WIFI无法连接互联网提示
  17. Zblog采集插件-Zblog插件教程以及下载
  18. java多线程并发之旅-09-java 生产者消费者 Producer/Consumer 模式
  19. Linux free 查看内存使用情况 常用命令
  20. macbook air 只安装win7系统

热门文章

  1. 融合不是冗余,全栈自研才有出路?特斯拉/Mobileye这样做
  2. 【人工智能】NIPS2019 | 2019NIPS论文 | NeurIPS2019最新更新论文~持续更新| NIPS2019百度云下载
  3. 搜狗词库合集分享_Rime小狼毫
  4. 快速生成电子发票的EXCEL表格
  5. 网站在线监控工具Uptime Kuma
  6. leetcode-堆
  7. 广州最最最牛逼的 IT 公司全在这了!
  8. autojs java文件_autojs官方文档
  9. Qt + 运动控制 (固高运动控制卡)【2】运动控制卡初始化和关闭
  10. 菜鸟升级记——模板方法模式