DDA划线法(Digital Differenttial Analyzer,数值微分法)@TOC

利用计算机画出一条高质量直线
输入:直线两个端点的坐标p0(x0,y0)和p1(x1,x2)
输出:最佳逼近这条直线的像素点集

在计算机中这些点集都是离散的,高质量直线的要求应满足
以下三个条件:
(1)直线要直,像素点尽可能靠近理想直线
(2)直线要均匀,连续,点数不能多也不能少
(3)显示线段的速度应该快,不能有卡顿现象(像素点的定位不能用乘除法,要用加减法,而且是正数加减法)

DDA算法是计算机图形学中画直线的基本算法,主要根据直线的斜截方程式(y=kx+b)推导出来的。
假设(|k|<=1)
x(i+1)=xi+1
y(i+1)=yi+k

推导 y0=kx0+b;
x1=x0+1;
y1=k(x0+1)+b=kx0+k+b=y0+k;

最终下一坐标(x,int(y+0.5) //y取整)

假设(|k|>1)
y(i+1)=yi+1;
x(i+1)=xi+1/k

推导 y0=kx0+b;
y1=y0+1;
y0+1=k(x1)+b; x1=(y0+1-b)/k;
x1=x0+1/k;

最终下一坐标(int(x+0.5),y) //x取整)
代码

void CthreeView::OnDraw(CDC* pDC)
{CthreeDoc* pDoc = GetDocument();ASSERT_VALID(pDoc);if (!pDoc)return;//TODO: 在此处为本机数据添加绘制代码//DDA算法int x0 = 100, y0 = 100, x1 = 300, y1 = 200;float x, y, i, dx, dy, k;dx = (float)(x1 - x0); dy = (float)(y1 - y0);k = dy / dx; y = y0; x = x0;if (abs(k) < 1){for (; x <= x1; x++){pDC->SetPixel(x, int(y + 0.5), RGB(255, 0, 0));y = y + k;}}if (abs(k) >= 1){for (; y <= y1; y++){pDC->SetPixel(int(x + 0.5), y, RGB(255, 0, 0));x = x + 1 / k;}}
}

DDA划线法(Digital Differenttial Analyzer,数值微分法)相关推荐

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

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

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

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

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

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

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

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

  5. PYTHON脚本将excl表格中的科学计数法转变为普通数值

    最近公司在开发自动化测试的上位机,在处理示波器的数据的时候发现示波器保存的csv文件的值是用科学计数法的,在此分享一种方法可以将csv文件中的科学计数法转换成普通数值并转存到excl文件中的方法 先上 ...

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

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

  7. PLSQL Developer中数值字段由科学计数法改为普通数值显示

    转载自:https://jingyan.baidu.com/article/90808022ffa3defd91c80f23.html?qq-pf-to=pcqq.group 在使用PLSQL Dev ...

  8. matlab中牛顿下山法实例,非线性方程的数值解法牛顿下山法matlab

    非线性方程的数值解法牛顿下山法matlab 1 非线性方程的数值解法 --计算物理实验作业九 陈万 物理学2013级 130******** ● 题目: 用下列方法求0133=--=x x f(x)在 ...

  9. matlab中牛顿下山法实例,非线性方程的数值解法牛顿下山法matlab.docx

    非线性方程的数值解法牛顿下山法matlab.docx 1 非线性方程的数值解法 --计算物理实验作业九 陈万 物理学2013级 13020011006  题目: 用下列方法求 在 附近的根.根的准确 ...

  10. 计算机图形学(三种画线算法)

    第二章:光栅图形学算法 1.光栅显示器:光栅扫描式图形显示器简称光栅显示器,是画点设备,可看作是一个点阵单元发生器,并可控制每个点阵单元的亮度 2.由来:随着光栅显示器的出现,为了在计算机上处理.显示 ...

最新文章

  1. 在CentOS上安装TCP协议性能评测工具tcpdive
  2. Android 笔记:BroadcastReceiver
  3. Fetch -- http请求的另一种姿势
  4. python基础语法合集-Python基础语法(四)—列表、元组、字典、集合、字符串
  5. 用前序和中序重建二叉树 python
  6. sql中datetime日期类型字段比较(mysqloracle)
  7. Shell sed命令,替换文件内容、替换目录下所有文件内容、读取文件内容
  8. 将 SharePoint 2010 网站集升级到 2013 (含沙盒方案)
  9. 用三张图看透 I/O,学习区分同异步阻塞
  10. php教育网站设计案例_南广东区优秀网站设计案例集锦第四期
  11. 巴菲特对优质公司买卖
  12. 京牌车辆过户以后车辆保险怎么办?
  13. 如何批量打印 带图片名字的图片?Word 宏命令
  14. java_获得用户显示器大小
  15. 光纤光猫连接自己路由器的设定
  16. 【3】计算机原理-显卡工作模型
  17. ps快捷键对应的英文字母缩写
  18. 信息与电脑杂志信息与电脑杂志社信息与电脑编辑部2022年第8期目录
  19. C语言中%d,%s,%x,%f,%.100f,%的意思
  20. 从GitHub上下载项目后如何运行,学习

热门文章

  1. 从时间上算,我和李笑来是同一批人 | 十年币圈生存实录
  2. 论文阅读——LSQ:Learned Step Size Quantization
  3. 基于第三代测序技术的基因组组装方法及其在烟草中的应用
  4. 路由器和三层交换机区别
  5. 杭电计算机研究生就业报告,实力杭电 | 留杭就业人数又双叒叕NO.1,快来围观杭电2018届毕业就业质量报告...
  6. ALSA子系统(十三)------snd_pcm_hw_refine硬件参数重定义
  7. 学画画软件app推荐_绘画APP推荐|很全的学画画的APP推荐
  8. 这是一个赞赏码(附赞赏码生成方法)
  9. npm安装包报400错误
  10. 银河麒麟V10(Kylin Linux Advanced Server V10 (Tercel))安装Python3.8、MySQL5.7、Redis