直线绘制算法-数值微分法(DDA)
一.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]--直线画法(数值微分法) 以下所有代码均在VS2010下的MFC框架下使用 DDA(数值微分法)介绍 一.基本原理 通过计算直线的斜率k和截距b,y = kx+b 1.计算起点 ...
- 直线绘制算法-Bresenham算法
该算法相较于其他直线绘制算法摆脱了直线方程式的使用,通过换元的思想实现整数加法的迭代. 一.Bresenham算法 前提条件k∈[0,1],直线在x方向上每次增量为,在y方向上每次的增量为.通过一个变 ...
- 计算机图形学 之 DDA直线算法(数值微分法)
1. 直线段的扫描转换算法 在数学上,直线就是由无穷多个点组成的, 在计算机屏幕显示的话, 需要做一些处理,对于光栅显示器 光栅显示器上就是用有限多个点去逼近直线, 那么这些有限个点,我们需要知道每一 ...
- c++三种直线绘制算法
#include <graphics.h> //包含EGE的头文件 void DDAline(int x1, int y1, int x2, int y2, int color) {int ...
- 计算机图形学 学习笔记(一):概述,直线扫描转换算法:DDA,中点画线算法,Bresenham算法
前言 本笔记基于 http://www.icourse163.org/learn/CAU-45006?tid=1001746004#/learn/announce 感谢中国农大 赵明老师的分享~ 现在 ...
- 图形学(2)光栅图形学的直线绘制(上)
本模块内容绝大部分是在慕课上看中国农业大学网客时的笔记,因此算作转载,在此鸣谢赵明.李振波两位老师,感谢他们录制该门课程供大家学习! 光栅图形学 为适应光栅显示器,需发展一套和他相适应的算法来处理.显 ...
- 图形学(3)光栅图形学的直线绘制(下)
本模块内容绝大部分是在慕课上看中国农业大学网客时的笔记,因此算作转载,在此鸣谢赵明.李振波两位老师,感谢他们录制该门课程供大家学习! Bresenham算法 前两种算法把效率提高到了整数加法级别,只讲 ...
- 数值微分法绘制直线c语言,OpenGL数值微分法(DDA)画直线
DDA算法,是计算机图形学中一种基于直线的微分方程来生成直线的方法,由于有浮点数运算与取整,该算法不利于硬件实现. 其主要思想是由直线公式y = kx + b推导出来的. 我们已知直线段两个端点P0( ...
- DDA画线算法+代码详解-直线扫描算法之一
#DDA画线算法+代码详解-直线扫描算法之一 本文目录结构如下 1.直线扫描算法简介 2.DDA直线扫描算法 2.1 公式推理 1.求斜率K: 2.当|K| <= 1 时 3.当|K| > ...
- 计算机图形学01:直线生成算法(DDA算法)
作者:非妃是公主 专栏:<计算机图形学> 博客地址:https://blog.csdn.net/myf_666 个性签:顺境不惰,逆境不馁,以心制境,万事可成.--曾国藩 文章目录 专栏推 ...
最新文章
- 计算机视觉 专业术语,计算机视觉专业相关术语中英文对照5
- [声明]关于春节回家期间不能更新Blog的说明
- 人脸识别算法初次了解
- c语言源码转流程图工具_C语言学习路线 (详细)
- 网格布局每个网格都能放置一个组件_Android综合试题
- gcp devops_将GCP AI平台笔记本用作可重现的数据科学环境
- [css] word-wrap、word-break和white-space有什么区别?
- Laravel框架一:原理机制篇
- Gompertz模型绘图 matlab,Logistic模型matlab求解
- linux下的c语言编程实验4,实验四-Linux下的C语言编程
- es和oracle,Oracle和Elasticsearch数据同步
- 如何使用Python给Excel写入数据
- 2011 9 11最新过QQ游戏检测Cheat Engine(CE)搜索数据
- 我喜欢的学科计算机 英文作文,我喜欢的学科写英语作文40字
- CODEVS1296
- Android自动更新时间去除WIFI无法连接互联网提示
- Zblog采集插件-Zblog插件教程以及下载
- java多线程并发之旅-09-java 生产者消费者 Producer/Consumer 模式
- Linux free 查看内存使用情况 常用命令
- macbook air 只安装win7系统