DDA 算法

CAD 算法是计算机辅助设计的算法,几何算法是解决几何问题的算法

CAD 算法是指在计算机辅助设计软件中使用的算法,用于实现各种设计和绘图功能,CAD 广泛应用于建筑、机械、电子等领域,可以大大提高设计效率和精度

绘图算法是 CAD 软件的基础,它包括点、线、圆、曲线、等基本图形绘制方法。

DDA (Digital Differential Analyzer)算法是一种在计算机图形学中常用的直线生成算法。这个算法主要思想是通过计算直线斜率来确定每个像素点的位置,从而绘制出一条直线。在 CAD (计算机辅助设计)中,DDA 算法常被用来绘制直线。

算法步骤

  • 输入直线的起点 ( x 1 , y 1 ) (x_1, y_1) (x1,y1) 和终点 ( x 2 , y 2 ) (x_2, y_2) (x2,y2)
  • 计算直线的斜率 k : = y 2 − y 1 x 2 − x 1 k:= \frac{y_2 - y_1}{x_2 - x_1} k:=x2x1y2y1
  • 确定步长,如果 ∣ k ∣ ≤ 1 |k| \leq 1 k1 则以 x x x方向为主轴,步长 为 1 m \frac{1}{m} m1,如果 ∣ k ∣ > 1 |k| > 1 k>1 y y y方向为主轴,步长为 m m m
  • 循环绘制,使用步长逐点计算直线上的像素坐标,每个位置绘制像素,直到达到终点

DDA算法是一种简单而有效的直线绘制算法,但有时由于浮点运算的误差,可能导致绘制的直线不够精确。在实际应用中,为了提高精度,可能需要采用其他更复杂的算法,如 Bresenham·算法。

import matplotlib.pyplot as plt

def draw_line_dda(x1, y1, x2, y2):
    dx = x2 - x1
    dy = y2 - y1
    steps = max(abs(dx), abs(dy))

    print(steps, "+++++++++++")

    # 计算步长
    x_increment = dx / steps if steps != 0 else 0  # Avoid division by zero
    y_increment = dy / steps if steps != 0 else 0  # Avoid division by zero

    # 初始化绘制起点
    x = x1
    y = y1

    # 绘制直线
    points = [(x, y)]
    for _ in range(steps):
        x += x_increment
        y += y_increment
        points.append((x, y))

    return points

# 示例:绘制直线从(1, 2)到(8, 10)和竖直线从(5, 2)到(5, 8)
x1, y1 = 1, 2
x2, y2 = 8, 10

line_points = draw_line_dda(x1, y1, x2, y2)

x3, y3 = 5, 2
x4, y4 = 5, 8

vertical_line_points = draw_line_dda(x3, y3, x4, y4)

x5, y5 = 1, 5
x6, y6 = 8, 5

hertical_line_points = draw_line_dda(x5, y5, x6, y6)

# 绘制结果
x_values, y_values = zip(*line_points)
plt.plot(x_values, y_values, marker='o', label='Line 1')

x_values, y_values = zip(*vertical_line_points)
plt.plot(x_values, y_values, marker='o', label='Line 2')

x_values, y_values = zip(*hertical_line_points)
plt.plot(x_values, y_values, marker='o', label='Line 3')

plt.title('DDA Algorithm - Drawing Lines')
plt.xlabel('X-axis')
plt.ylabel('Y-axis')
plt.legend()
plt.grid(True)
plt.show()


在这里插入图片描述

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

RLC防孤岛负载测试:电力系统安全运行的重要保障

在电力系统中,孤岛效应是一个严重的问题,它可能导致电力系统的不稳定甚至崩溃。为了确保电力系统的安全运行,必须进行RLC防孤岛负载测试。RLC防孤岛负载测试是一种模拟电网故障后,对电力系统进行检测的方法,主要用于检…

性格内向,如何找到适合自己的职业

很多人都会觉得性格内向是一件坏事,这会让自己在竞争激烈的生活中得不到好处,但其实在心理学上看来,每一种性格都有自己的优缺点,如果片面地用好坏去评定,就无法发挥性格的优势,也很难利用它们为自己所用。…

LLM(六)| Gemini:谷歌Gemini Pro 开放API ,Gemini Pro 可免费使用

近期,Google Gemini Pro 开放API 了,且Gemini Pro 可免费使用!Gemini Pro支持全球180个国家的38种语言,目前接受文本作为输入并生成文本作为输出。 Gemini API 地址:http://ai.google.dev Gemini Pro 的表现超越了其他…

Linux route命令详解

1、介绍 route命令用于显示和操作IP路由表,它允许用户查看当前系统的路由信息,添加新的路由、删除已有的路由等。 2、命令 2.1 命令选项 -n, --numeric:不解析主机名,直接显示IP地址。使用这个选项可以加快显示速度&#xff0…

Git忽略已经提交的文件

原理类似于 Android修改submodule的lib包名

“唯品会API接口:电商开发者的秘密武器”

一、引言 唯品会作为一家知名的电商平台,提供了丰富的API接口供开发者使用。通过使用唯品会的API接口,开发者可以轻松地与唯品会平台进行交互,实现自动化处理、数据抓取等功能。本文将详细介绍唯品会API接口的使用方法、技术细节以及注意事项…

C语言->动态内存管理

系列文章目录 文章目录 前言 ✅作者简介:大家好,我是橘橙黄又青,一个想要与大家共同进步的男人😉😉 🍎个人主页:橘橙黄又青_C语言,函数,指针-CSDN博客 目的:学习malloc&#xff0c…

【思考】只有实对称矩阵才能正交对角化吗?【矩阵的合同】

1:命题改写(A可以正交对角化) 2:左乘Q右乘Q逆(Q转置) 3:取转置 4:得证 总结 可以看到,矩阵如果可以正交对角化,那么一定是实对称矩阵。 另外,这…

shopee选品软件:如何利用Shopee选品软件优化你的销售业绩

在当今的电商市场中,选择适销的产品是成功的关键之一。然而,对于卖家来说,如何找到有潜力的产品并优化销售策略是一个具有挑战性的任务。幸运的是,有许多Shopee选品软件可以帮助卖家在Shopee平台上进行产品分析和选择。本文将介绍…

WPF 基于TableControl的页面切换

文章目录 前言其它项目的UserControl切换TableControl添加按钮,隐去TableItem的Header 结论 前言 我想用WPF简单实现一个按钮视图切换的效果,但是我发现别人的实现效果非常的麻烦。 其它项目的UserControl切换 我网上找了个开源的项目,他是…

100ask imx6ull 驱动(设备树)装载步骤

1.修改设备树文件 路径: vim 100ask_imx6ull-sdk/Linux-4.9.88/arch/arm/boot/dts/100ask_imx6ull-14x14.dtb 2. 回到linux内核目录下,执行命令 /*路径:100ask_imx6ull-sdk/Linux-4.9.88*/ make dtbs 将生成的arch/arm/boot/dts/100ask_…

【Spring】@SpringBootApplication注解解析

前言: 当我们第一次创建一个springboot工程时,我们会对启动类(xxxApplication)有许多困惑,为什么只要运行启动类我们在项目中自定义的bean无需配置类配置,扫描就能自动注入到IOC容器中?为什么我…

解决el-table组件中,分页后数据的勾选、回显问题?

问题描述: 1、记录一个弹窗点击确定按钮后,table列表所有勾选的数据信息2、再次打开弹窗,回显勾选所有保存的数据信息3、遇到的bug:切换分页,其他页面勾选的数据丢失;点击确认只保存当前页的数据&#xff1…

迅为RK3588开发板瑞芯微国产化工业ARM核心板AI人工智能

性能强 iTOP-3588开发板采用瑞芯微RK3588处理器,是全新一代AloT高端应用芯片,采用8nm LP制程,搭载八核64位CPU,四核Cortex-A76和四核Cortex-A55架构,主频高达2.4GHz,8GB内存,32GB EMMC。 四核心…

ACL和NAT

文章目录 ACL和NAT一、ACL概述及产生背景1、ACL访问控制列表2、ACL工作原理3、ACL种类4、ACL命令配置步骤4.1 ACL命令配置4.1 ACL配置步骤 二、NAT(网络地址转换)1、NAT概述2、NAT类型2.1 静态NAT与动态NAT 3、NATPT(端口映射)4、…

成都工业学院Web技术基础(WEB)实验二:HTML5表格、表单标签的使用

写在前面 1、基于2022级计算机大类实验指导书 2、代码仅提供参考,前端变化比较大,按照要求,只能做到像,不能做到一模一样 3、图片和文字仅为示例,需要自行替换 4、如果代码不满足你的要求,请寻求其他的…

Arduino使用定时器设置周期时间运行程序

1、用Arduino millis() 函数 实现一定程度上的多任务系统,可以设置不同时间的任务周期去执行对应的程序。比如需要10毫秒执行一次的程序、100毫秒执行一次的程序、1秒执行一次的程序。 2、Delay(ms)是延时函数,使用该延时函数,后面的程序将会…

租一台服务器多少钱决定服务器的价格因素有哪些

租一台服务器多少钱决定服务器的价格因素有哪些 大家好我是艾西,服务器这个名词对于不从业网络行业的人们看说肯定还是比较陌生的。在21世纪这个时代发展迅速的年代服务器在现实生活中是不可缺少的一环,平时大家上网浏览自己想要查询的信息等都是需要服…

统信UOS上图形化配置系统和应用代理

原文链接:统信UOS上图形化配置系统和应用代理 hello,大家好啊,今天我要给大家介绍的是在统信UOS操作系统上如何通过图形化界面配置系统代理和应用代理。在许多公司的内网环境中,直接访问互联网可能受到限制,但通常会提…