Python实现图形学DDA算法
算法原理
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算法相关推荐
- Python matplotlib 实现DDA算法
Python matplotlib 实现DDA算法 DDA算法全称数值微分法(Digital Differential Analyzer),是用数值方法解微分方程,即通过对x和y各增加一个小量,计算下 ...
- 计算机图形学——DDA算法
仅适用于|k|<=1,因为若|k|>1,中间画的点会太稀疏 #include<iostream> #include<Graphics.h> #include < ...
- 计算机图形学01:直线生成算法(DDA算法)
作者:非妃是公主 专栏:<计算机图形学> 博客地址:https://blog.csdn.net/myf_666 个性签:顺境不惰,逆境不馁,以心制境,万事可成.--曾国藩 文章目录 专栏推 ...
- 计算机图形学——生成直线的DDA算法
本博客计算机图形学系列文章索引: 地址:<计算机图形学系列相关文章索引(持续更新)> 数值微分法即DDA法(Digital Differential Analyzer),是一种基于直线的微 ...
- 计算机图形学之生成直线的DDA算法(C#)
计算机图形学DDA直线算法(C#) 一.直线的生成算法 实质上是一个发现最佳逼近直线的象素系列,并填入彩色数据的过程. 二.DDA算法 一种基于直线的微分方程来生成直线的一种方法. 三.DDA代码程序 ...
- 计算机图形学-扫描转换直线段-直线方程法-DDA算法-中点算法-OPENGL实现-详解
扫描转换直线段 说明与环境配置 环境配置 扫描转换直线段 方法一: 直线方程法 代码描述: 算法比较简单, 暂无代码. 方法二: 数字差分分析DDA算法 代码描述: 方法三: 中点算法 代码描述: 所 ...
- DDA算法画直线----计算机图形学
生成直线的DDA算法: 假设待扫描转换的直线段为 Pb(xb, yb), Pe(xe, ye),如图所示: 令 , 斜率 , 则直线方程为 为方便起见,这里 假定 . 显然,对于每一个 xi ...
- 【计算机图形学】扫面转换算法(DDA算法 中点画线算法 Bresenham画线算法)
模块1 扫描转换算法 一 实验目的 编写直线.弧线的光栅扫描转换算法,并对线宽与线形的算法加以探讨 用DDA算法.中点画线算法.Bresenham画线算法绘制直线(如果键盘输入数据,给出数据值:如果绘 ...
- 计算机图形学实习教程之基本图形的生成(直线DDA算法,直线中点算法,Bresenham画圆算法),利用C#实现,附源码
环境:Win10+Visual Studio 2022 Community 在本次实验中需要用到上一篇文章实验内容的代码及环境,详情请见:传送门 目录 一.实验目的 二.实验过程 1.生成直线的DDA ...
- 利用DDA算法得到直线上的像素点坐标
图片霍夫变换拟合得到直线后,怎样获得直线上的像素点坐标? 这是我今天在图像处理学习中遇到的问题,霍夫变换采用的概率霍夫变换,所以拟合得到的直线信息其实是直线的两个端点的坐标,这样一个比较直接的思路就是 ...
最新文章
- 为你的网站使用paypal
- Analysis servlet
- CodeIgniter学习笔记一
- 张帅用赢球庆生 搭档斯托瑟晋级澳网女双八强
- Vue本地图片循环加载显示不出来,vue img标签 :src地址拼接
- Android获取设备隐私 忽略6.0权限管理
- ISA频繁断线的原因和解决方法
- 芝加哥计算机科学硕士录取难度,美国cs研究生申请难度有多大?
- Linux的/var/www/html目录
- 催眠与大脑的信息处理
- 华为鸿蒙4月推送名单,华为鸿蒙系统定档4月,首批升级名单确定,3款机型优先体验...
- 微软.NET设计上的一个错误(从.NET1.1--4.0),不知道以后.NET会不会修复这个错误...
- Axure制作微信APP原型(二)登录注册模块
- R实现KMeans聚类算法教程
- 处nm是什么意思_nm是什么意思
- 优漫动游做平面设计用什么显卡好?
- 程序员可以收藏的几个导航网站
- js 26个字母排序
- 上云 企业 过程_企业上云有什么好处?该怎么上云?附操作步骤
- 4G时代 载波聚合——用户、网络双受益