计算机图形学:直线生成算法—DDA

DDA(Digital Differential Analyzer,数字差分分析器)算法是一种基本的直线生成算法,通常用于计算机图形学中。它通过将直线划分为若干个等间隔的小线段,然后在每个小线段中选择一个像素点进行绘制,从而近似地绘制出直线。

算法步骤如下:

  1. 计算斜率: 首先计算直线的斜率,即直线在x和y方向上的变化率。斜率可以通过起点和终点的坐标差值来计算,​y2​−y1​​, x2​−x1。

  2. 选择步长: 根据斜率确定每一步在x和y方向上的增量。通常选择x方向或y方向上的增量中较大的一个作为步长。

  3. 绘制直线: 从起点开始,沿着直线的路径,依次在每个步长处选择最接近直线路径的像素点进行绘制。在DDA算法中,这些像素点的坐标是通过简单的整数增量计算得到的,因此不需要进行复杂的浮点数运算。

  4. 结束条件: 直到绘制到终点为止,算法结束。

P0(1, 1)  , P1(7, 9) :

 P0(1, 1)  , P1(8, 11) :

DDA的python代码: 

import matplotlib.pyplot as pltdef DDALine(x1, y1, x2, y2, color):dx = x2 - x1dy = y2 - y1# calculate steps required for generating pixels steps = abs(dx) if abs(dx) > abs(dy) else abs(dy)# calculate increment in x & y for each stepsXinc = float(dx / steps)Yinc = float(dy / steps)xx = []yy = []for i in range(0, int(steps + 1)):xx.append(int(x1))yy.append(int(y1))# Draw pixels# plt.plot(int(x1), int(y1), color, )x1 += Xincy1 += Yinc# parameter: marker='*', markersize=10, mfc = 'r'# Coordinate points marked with *plt.plot(xx, yy, color = 'b', linestyle='-.', linewidth = 1, marker='*', markerfacecolor = 'r', markersize = 10)plt.legend('DDA')plt.grid(True)plt.show()def main():# Enter the value yourself# x = int(input("Enter X1: "))# y = int(input("Enter Y1: "))# xEnd = int(input("Enter X2: "))# yEnd = int(input("Enter Y2: "))\x = 1y = 1xEnd = 7yEnd = 9color = "r."DDALine(x, y, xEnd, yEnd, color)if __name__ == '__main__':main()

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/pingmian/1308.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

产品原型图概念

产品原型图概念 产品原型图作用 如下图: 产品原型图的三种分类 线框图 通过【线段色块文字】描述产品页面。优点:制作快速。 缺点:传递信息容易遗漏。 应用:早期方案讨论,需要快速输出的场景,团队配合…

Learn ComputeShader 01 First Computer Shader

使用Unity版本:2019.4.12f1 整体流程: 1添加一个quad object并添加一个无光照材质 2.相机投影模式设置为正交 3.调整quad使其完全显示在相机内 4.创建脚本并且使用计算着色器覆盖quad的纹理 5.创建一个compute shader 前三步完成以后结果应该是这…

网络基础先导

前言:最好在牢固前面几大件(编程语言、数据结构、操作系统),并且您有一个服务器的基础上(我使用的是腾讯云中配置最低的服务器)再来学习本系列的网络知识。 1.网络发展简要 下面就是简单提及一些概念而已&…

二叉树之AVL树

文章目录 1. AVL树的概念(logN)1.1背景1.2规则 2.AVL树节点的定义3.AVL树的插入4. AVL树的旋转(重点)4.1 新节点插入较高的右子树的右侧:左单璇;4.2 新节点插入较高左子树的左侧:右单璇;4.3(双旋…

AJAX——ajax原理

1.XMLHttpRequest 定义:XMLHttpRequest(XHR)对象用于与服务器交互。通过XMLHttpRequest可以在不刷新页面的情况下请求特定URL,获取数据。这允许网页在不影响用户操作的情况下,更新页面的局部内容。XMLHttpRequest在AJA…

数据输入输出流(I/O)

文章目录 前言一、数据输入输出流是什么?二、使用方法 1.DataInputStream类2.DataOutoutStream类3.实操展示总结 前言 数据输入输出流也是将文件输入输出流打包后使用的对象。相比于文件输入输出流,数据输入输出流提供了简单易用的方法去操作不同类型的数…

【FreeRTOS】常用API接口

【FreeRTOS】常用API接口 为方便快速检索,这里只留下对应的接口名和功能注释,具体传参和使用方法拿函数名百度搜。 任务相关 xTaskCreate() //创建任务 vTaskDelete( NULL ); //删除任务,传入NULL为删除当前的任务 vTaskStartScheduler()&…

【微服务】spring读取配置文件多种方式深入详解

目录 一、前言 二、java配置文件介绍 2.1 java配置文件产生原因 2.2 项目使用配置文件好处 2.3 springboot项目配置文件的必要性 2.4 微服务架构下配置文件使用场景 三、java读取配置文件常用方法 3.1 使用Properties类读取配置文件 3.1.1 使用getResourceAsStream读取…

时序分析基础(6)——input delay时序分析

1 简介 FPGA对于外部的时钟以及数据的延时信息是不知道的,在低速时钟且时钟发射沿在数据正中心的时候,一般可以不做约束来直接使用。但是到了高速时钟或者双沿采样或者发射沿和数据对齐的情况下,这时候就需要告诉VIVADO外部的时钟与数据情况来…

多轴机械臂/正逆解/轨迹规划/机器人运动学/Matlab/DH法 学习记录03——机械臂运动学逆解

系列文章目录 本科毕设正在做多轴机械臂相关的内容,这里是一个学习机械臂运动学课程的相关记录。 如有任何问题,可发邮件至layraliufoxmail.com问询。 1. 数学基础 2. 机械臂几何法与DH表示法 3. 机械臂运动学逆解 文章目录 系列文章目录一、引言1.手臂…

文件系统和软硬链接

文章目录 文件系统磁盘磁盘逻辑抽象inode 软硬链接软链接硬链接 文件系统 文件分为打开的文件和没有被打开的文件,而只有打开的文件是在内存的,也就是我们之前讲的,然而大部分文件都不是被打开的(当前不需要被访问的),它们都在磁…

硬盘日常使用中的注意事项

硬盘是计算机中的重要存储设备,负责存储大量的数据。为了确保数据的完整性和硬盘的寿命,日常使用中需要注意以下几点: 避免震动和撞击:硬盘在工作时,内部的磁盘正在高速旋转,任何轻微的震动或撞击都可能导致磁盘损坏或数据丢失。因此,使用硬盘时应确保计算机放置稳定,避…

输电线路运行特性及简单电力系统潮流估算(二)

本篇为本科课程《电力系统稳态分析》的笔记。 本篇为这一章的第二篇笔记。上一篇传送门,下一篇传送门。 输电线路的运行特性 输电线路的空载运行特性 线路的等值电路如图所示。 由于是空载,则 S ~ 2 0 \widetilde{S}_20 S 2​0,可以计算…

4月阿里offer被毁,我该怎么进字节?

在校招求职的浪潮中,有些故事总是让人唏嘘不已。比如最近在社交平台上广泛讨论的一个话题:“4月阿里offer被毁,我该怎么进字节?”这不仅反映了当下职场的变动性,也映射了求职者在面对突如其来的变故时的无助与挣扎。 …

QT 按钮的工具提示tooltips设置字体大小颜色与背景

QT 按钮的工具提示tooltips设置字体颜色与背景 main.cpp添加 mainwindow.cpp添加全局配置: 构造函数中: QToolTip::setFont(font3); //按钮提示信息通用设置 如下: MainWindow_oq::MainWindow_oq(QWidget *parent) : QMainWindow(parent)…

光伏电站智能勘探:无人机优势及流程详解

随着科技和互联网技术的不断发展,无人机在各个领域的应用越来越广泛,其中之一就是光伏电站智能勘探。利用无人机高清摄像头和传感器等设备,可以对光伏电站周边环境、日照情况、房屋状态进行全方面的勘探和记录,搭配卫星勘探、实地…

C语言中scanf、gets、fgets的区别

scanf、gets和fgets都是C语言中用于从标准输入读取数据的函数,但它们之间存在一些重要的差异: scanf: scanf是一个格式化输入函数,它可以根据指定的格式从标准输入读取数据。使用scanf读取字符串时,需要小心处理缓冲区…

springboot注解开发如何映射对象型数据

创作灵感 最近在帮学校写一款小程序时,有这样一个数据需要展示:一条申请记录,里面包含了申请时间、申请状态、申请所提供的六条活动记录等待,其中,申请所提供的六条活动记录为一个数组,数组中的每个元素又…

【BUG】Hexo|GET _MG_0001.JPG 404 (Not Found),hexo博客搭建过程图片路径正确却找不到图片

我的问题 我查了好多资料,结果原因是图片名称开头是_则该文件会被忽略。。。我注意到网上并没有提到这个问题,遂补了一下这篇博客并且汇总了我找到的所有解决办法。 具体检查方式: hexo生成一下静态资源: hexo g会发现这张图片…

二维码门楼牌管理应用平台建设:网格化管理的新篇章

文章目录 前言一、二维码门楼牌管理应用平台的建设背景二、二维码门楼牌管理应用平台的功能特点三、二维码门楼牌管理应用平台的实际应用四、二维码门楼牌管理应用平台的前景展望 前言 随着信息技术的飞速发展,二维码门楼牌管理应用平台的建设已成为城市网格化管理…