算法原理

DDA算法是计算机图形学中最简单的绘制直线算法。其主要思想是由直线公式y = kx + b推导出来的。

我们已知直线段两个端点P0(x0,y0)和P1(x1,y1),就能求出 k 和 b 。

在k,b均求出的条件下,只要知道一个x值,我们就能计算出一个y值。如果x的步进为1(x每次加1,即x = x +1),那么y的步进就为k+b;同样知道一个y值也能计算出x值,此时y的步进为1,x的步进为(1-b)/k。根据计算出的x值和y值,向下取整,得到坐标(x’,y’),并在(x’,y’)处绘制直线段上的一点。

算法步骤

首先,计算Δ x、Δ y、k的值

dx, dy = x2 - x1, y2 - y1
k = dy/dx
x, y = x1, y1

接着,在0~Δ x的范围内,根据x每一步的前进,计算y的值,进行画点。

for i in range(0, int(abs(dx)+1)):#需要四舍五入plt.plot(int(round(x)), int(round(y)), 'b.', markersize = 1)x += 1y += float(k)

算法结果

起点(10, 20),终点(300,220)

算法源码

import matplotlib.pyplot as plt
from matplotlib.ticker import MaxNLocatordef DDA(x1, y1, x2, y2):dx, dy = x2 - x1, y2 - y1k = dy/dxx, y = x1, y1#网格线plt.grid()#x轴y轴数值取整plt.gca().xaxis.set_major_locator(MaxNLocator(integer=True))plt.gca().yaxis.set_major_locator(MaxNLocator(integer=True))#绘点for i in range(0, int(abs(dx)+1)):#需要四舍五入plt.plot(int(round(x)), int(round(y)), 'b.', markersize = 1)x += 1y += float(k)plt.show()def main():x,y = 10,20xEnd, yEnd = 300,220if xEnd < x:x,y, xEnd, yEnd = xEnd, yEnd, x, yDDA(x, y, xEnd, yEnd)if __name__ == '__main__':main()

Python实现图形学DDA算法相关推荐

  1. Python matplotlib 实现DDA算法

    Python matplotlib 实现DDA算法 DDA算法全称数值微分法(Digital Differential Analyzer),是用数值方法解微分方程,即通过对x和y各增加一个小量,计算下 ...

  2. 计算机图形学——DDA算法

    仅适用于|k|<=1,因为若|k|>1,中间画的点会太稀疏 #include<iostream> #include<Graphics.h> #include < ...

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

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

  4. 计算机图形学——生成直线的DDA算法

    本博客计算机图形学系列文章索引: 地址:<计算机图形学系列相关文章索引(持续更新)> 数值微分法即DDA法(Digital Differential Analyzer),是一种基于直线的微 ...

  5. 计算机图形学之生成直线的DDA算法(C#)

    计算机图形学DDA直线算法(C#) 一.直线的生成算法 实质上是一个发现最佳逼近直线的象素系列,并填入彩色数据的过程. 二.DDA算法 一种基于直线的微分方程来生成直线的一种方法. 三.DDA代码程序 ...

  6. 计算机图形学-扫描转换直线段-直线方程法-DDA算法-中点算法-OPENGL实现-详解

    扫描转换直线段 说明与环境配置 环境配置 扫描转换直线段 方法一: 直线方程法 代码描述: 算法比较简单, 暂无代码. 方法二: 数字差分分析DDA算法 代码描述: 方法三: 中点算法 代码描述: 所 ...

  7. DDA算法画直线----计算机图形学

    生成直线的DDA算法: 假设待扫描转换的直线段为 Pb(xb, yb), Pe(xe, ye),如图所示: 令  , 斜率  , 则直线方程为  为方便起见,这里 假定  . 显然,对于每一个 xi  ...

  8. 【计算机图形学】扫面转换算法(DDA算法 中点画线算法 Bresenham画线算法)

    模块1 扫描转换算法 一 实验目的 编写直线.弧线的光栅扫描转换算法,并对线宽与线形的算法加以探讨 用DDA算法.中点画线算法.Bresenham画线算法绘制直线(如果键盘输入数据,给出数据值:如果绘 ...

  9. 计算机图形学实习教程之基本图形的生成(直线DDA算法,直线中点算法,Bresenham画圆算法),利用C#实现,附源码

    环境:Win10+Visual Studio 2022 Community 在本次实验中需要用到上一篇文章实验内容的代码及环境,详情请见:传送门 目录 一.实验目的 二.实验过程 1.生成直线的DDA ...

  10. 利用DDA算法得到直线上的像素点坐标

    图片霍夫变换拟合得到直线后,怎样获得直线上的像素点坐标? 这是我今天在图像处理学习中遇到的问题,霍夫变换采用的概率霍夫变换,所以拟合得到的直线信息其实是直线的两个端点的坐标,这样一个比较直接的思路就是 ...

最新文章

  1. 为你的网站使用paypal
  2. Analysis servlet
  3. CodeIgniter学习笔记一
  4. 张帅用赢球庆生 搭档斯托瑟晋级澳网女双八强
  5. Vue本地图片循环加载显示不出来,vue img标签 :src地址拼接
  6. Android获取设备隐私 忽略6.0权限管理
  7. ISA频繁断线的原因和解决方法
  8. 芝加哥计算机科学硕士录取难度,美国cs研究生申请难度有多大?
  9. Linux的/var/www/html目录
  10. 催眠与大脑的信息处理
  11. 华为鸿蒙4月推送名单,华为鸿蒙系统定档4月,首批升级名单确定,3款机型优先体验...
  12. 微软.NET设计上的一个错误(从.NET1.1--4.0),不知道以后.NET会不会修复这个错误...
  13. Axure制作微信APP原型(二)登录注册模块
  14. R实现KMeans聚类算法教程
  15. 处nm是什么意思_nm是什么意思
  16. 优漫动游做平面设计用什么显卡好?
  17. 程序员可以收藏的几个导航网站
  18. js 26个字母排序
  19. 上云 企业 过程_企业上云有什么好处?该怎么上云?附操作步骤
  20. 4G时代 载波聚合——用户、网络双受益

热门文章

  1. SQL Server2008安装详细教程
  2. 快手用户公开视频下载代码
  3. MySQL可视化工具使用
  4. Fortran77基础
  5. 如何下载使用期刊 LateX 模板
  6. NBU查看备份集大小
  7. linux中nbu主机备份,NBU60网络备份大全之Linux设备管理.doc
  8. pitch yaw roll是什么
  9. 重写弹幕射击游戏的记录
  10. 函数 free 的原型