python道格拉斯算法的实现
废话不多说 直接开干
需要用到模块
pip install -i https://pypi.tuna.tsinghua.edu.cn/simple math #对浮点数的数学运算函数
pip install -i https://pypi.tuna.tsinghua.edu.cn/simple shapely #提供几何形状的操作和分析,如交集、并集、差集等
pip install -i https://pypi.tuna.tsinghua.edu.cn/simple matplotlib #可视化模块
项目需要优化运动轨迹路线 用到道格拉斯算法 相对来说很实用 建议 用到GPS定位同行可以试试看
运行代码
# -*- coding:utf-8 -*-
"""
道格拉斯算法的实现
程序需要安装shapely模块
"""
import math
from shapely import wkt, geometry
import matplotlib.pyplot as pltclass Point:"""点类"""x = 0.0y = 0.0index = 0 # 点在线上的索引def __init__(self, x, y, index):self.x = xself.y = yself.index = indexclass Douglas:"""道格拉斯算法类"""points = []D = 1 # 容差def readPoint(self):"""生成点要素"""g = wkt.loads("LINESTRING(1 4,2 3,4 2,6 6,7 7,8 6,9 5,10 10)")coords = g.coordsfor i in range(len(coords)):self.points.append(Point(coords[i][0], coords[i][1], i))def compress(self, p1, p2):"""具体的抽稀算法"""swichvalue = False# 一般式直线方程系数 A*x+B*y+C=0,利用点斜式,分母可以省略约区# A=(p1.y-p2.y)/math.sqrt(math.pow(p1.y-p2.y,2)+math.pow(p1.x-p2.x,2))A = (p1.y - p2.y)# B=(p2.x-p1.x)/math.sqrt(math.pow(p1.y-p2.y,2)+math.pow(p1.x-p2.x,2))B = (p2.x - p1.x)# C=(p1.x*p2.y-p2.x*p1.y)/math.sqrt(math.pow(p1.y-p2.y,2)+math.pow(p1.x-p2.x,2))C = (p1.x * p2.y - p2.x * p1.y)m = self.points.index(p1)n = self.points.index(p2)distance = []middle = Noneif (n == m + 1):return# 计算中间点到直线的距离for i in range(m + 1, n):d = abs(A * self.points[i].x + B * self.points[i].y + C) / math.sqrt(math.pow(A, 2) + math.pow(B, 2))distance.append(d)dmax = max(distance)if dmax > self.D:swichvalue = Trueelse:swichvalue = Falseif (not swichvalue):for i in range(m + 1, n):del self.points[i]else:for i in range(m + 1, n):if (abs(A * self.points[i].x + B * self.points[i].y + C) / math.sqrt(math.pow(A, 2) + math.pow(B, 2)) == dmax):middle = self.points[i]self.compress(p1, middle)self.compress(middle, p2)def printPoint(self):"""打印数据点"""for p in self.points:print( "%d,%f,%f" % (p.index, p.x, p.y))def main():"""测试"""d = Douglas()d.readPoint()# d.printPoint()# 结果图形的绘制,抽稀之前绘制fig = plt.figure()a1 = fig.add_subplot(121)dx = []dy = []for i in range(len(d.points)):dx.append(d.points[i].x)dy.append(d.points[i].y)a1.plot(dx, dy, color='g', linestyle='-', marker='+')d.compress(d.points[0], d.points[len(d.points) - 1]) #稀释后轨迹# 抽稀之后绘制dx1 = []dy1 = []a2 = fig.add_subplot(122)for p in d.points:print(p.x,p.y)dx1.append(p.x)dy1.append(p.y)a2.plot(dx1, dy1, color='r', linestyle='-', marker='+')plt.show()if __name__ == '__main__':main()
看下效果 优化轨迹路线


相关文章:
python道格拉斯算法的实现
废话不多说 直接开干 需要用到模块 pip install -i https://pypi.tuna.tsinghua.edu.cn/simple math #对浮点数的数学运算函数 pip install -i https://pypi.tuna.tsinghua.edu.cn/simple shapely #提供几何形状的操作和分析,如交集、并集、差集等 pip install -i …...
STM32的hal库中,后缀带ex和不带的有什么区别
在STM32的HAL(硬件抽象层)库中,后缀带“ex”和不带“ex”的文件及其包含的内容存在显著的区别。这些区别主要体现在功能扩展性、使用场景以及API的层次上。 一、功能扩展性 不带“ex”后缀的文件: 这些文件通常包含标准的、核心…...
可观测性三大支柱
目录 可观测性成熟度模型 可观测性三大支柱的具体定义如下 指标 日志 链路 可观测性成熟度模型 可观测性成熟度模型,是一种用于衡量和评估企业软件系统内部可观测性的框架或方法,同 时也是一种用于反馈企业可观测性体系建设成熟度水平的框架或方法…...
【银河麒麟高级服务器操作系统·实例分享】裸金属服务器开机失败分析及处理建议
了解更多银河麒麟操作系统全新产品,请点击访问 麒麟软件产品专区:https://product.kylinos.cn 开发者专区:https://developer.kylinos.cn 文档中心:https://documentkylinos.cn 现象描述 裸金属物理服务器开机卡在EFI stub页面…...
模型剪枝实操
文章目录 实验报告:模型剪枝在图像分类任务中的应用摘要实验方法数据集和预处理模型架构剪枝过程实验设置 实验效果性能对比详细分析 结论 实验报告:模型剪枝在图像分类任务中的应用 摘要 本实验通过模型剪枝技术,对一个图像分类模型进行压…...
网安学习路线!最详细没有之一!看了这么多分享网安学习路线的一个详细的都没有!
零基础小白,到就业!入门到入土的网安学习路线! 在各大平台搜的网安学习路线都太粗略了。。。。看不下去了! 我把自己报班的系统学习路线,整理拿出来跟大家分享了!点击下图,福利! …...
Ubuntu18.04安装vscode1.94.2失败安装vscode1.84.2
系统环境:Ubuntu18.04.6 LTS 自己先去vscode官网下载好最新版本的vscode1.94.2(不下也行,反正最新版也用不了,哈哈) 网址:Visual Studio Code - Code Editing. RedefinedVisual Studio Code is a code ed…...
Redis中Lua脚本的使用场景
Redis 中的 Lua 脚本可以用于多种场景,以下是一些常见的使用场景及其对应的 Java 实现示例。 通过使用 Lua 脚本,可以在 Redis 中实现复杂的逻辑和原子操作,同时利用 Java 客户端(如 Spring Data Redis)方便地执行这些…...
重工业数字化转型创新实践:某国家特大型钢铁企业如何快速落地基于实时数仓的数据分析平台
使用 TapData,化繁为简,摆脱手动搭建、维护数据管道的诸多烦扰,轻量替代 OGG, Kettle 等同步工具,以及基于 Kafka 的 ETL 解决方案,「CDC 流处理 数据集成」组合拳,加速仓内数据流转,帮助企业…...
【linux】手动启动sshd
安装openssh-server修改配置文件启动 以下是在常见的Linux系统中手动开启sshd服务的步骤: 1.安装openssh-server CentOS/RHEL系统 首先,以具有管理员权限的用户(通常是root)登录到系统。检查sshd服务是否已经安装。可以使用以…...
前端项目【本科期间】
1.基于博达网站群的申达办官方网站开发与维护 实习项目:校发展规划中心暨申请更名大学办公室官方网站 技术栈:HTML/CSS/Javascript 博达网站群的入门级指南 -CSDN博客博达网站群的入门级指南 -CSDN博客 网上少的较全的基于博达网站建设指南,CSDN相关内容综合指数NO有.1 …...
深度学习中的学习率调度:循环学习率、SGDR、1cycle 等方法介绍及实践策略研究
深度学习实践者都知道,在训练神经网络时,正确设置学习率是使模型达到良好性能的关键因素之一。学习率通常会在训练过程中根据某种调度策略进行动态调整。调度策略的选择对训练质量也有很大影响。 大多数实践者采用一些广泛使用的学习率调度策略,例如阶梯式衰减或余弦退火。这些…...
Python毕业设计-基于 Python flask 的前程无忧招聘可视化系统,Python大数据招聘爬虫可视化分析
博主介绍:✌Java徐师兄、7年大厂程序员经历。全网粉丝13w、csdn博客专家、掘金/华为云等平台优质作者、专注于Java技术领域和毕业项目实战✌ 🍅文末获取源码联系🍅 👇🏻 精彩专栏推荐订阅👇🏻 不…...
Linux初阶——线程(Part1)
一、线程概念 1、如何理解线程 说到线程,那么我们就要回到进程了。 1.1. 再谈进程 对一个进程来说,它在内存中是这样的: 图1.1-a 其中一个 task_struct 独享一个进程地址空间和一个页表。 而线程其实和进程差不多,是这样的&…...
SpringBoot后端开发常用工具详细介绍——flyway数据库版本控制工具
文章目录 什么是flyway简介为什么要使用flyway 流程介绍整合springboot添加pom文件配置flyway向resource/db/migration添加sql文件 注意事项1. 迁移报错2. 迁移顺序 参考 什么是flyway 简介 为什么要使用flyway 我们在开发时往往会有这样一种情况: 进行软件开发…...
CSS揭秘:7. 伪随机背景
前置知识:CSS 渐变,5. 条纹背景,6. 复杂的背景图案 前言 本篇主要内容依然是关于背景的,无限平铺的背景会显得整齐美观,但又有些呆板,如何实现背景的多样性和随机性,是本篇的核心。 一、四种颜…...
SAP CODE DEMO:查找AL11 指定路径下文件中的内容
有时候需要查找某个具体的内容,在哪个文件内。数据量大的时候可以利用程序查找 选择界面: 路径,和文件名都可以模糊搜查 search string:你要查找的信息。 代码参考如下: report z00R010 NO STANDARD PAGE HEADING…...
【华为HCIP实战课程二十四】中间到中间系统协议IS-IS配置实战,网络工程师
一、IS-IS整体架构 将Level-1路由器部署在非骨干区域,Level-2路由器和Level-1-2路由器部署在骨干区域。 每一个非骨干区域都通过Level-1-2路由器与骨干区域相连! 1、在IS-IS中,每个链路可以属于不同的区域,OSPF中每个链路属于同一个区域 2、在IS-IS中,单个区域没有物理…...
【工具】新手礼包之git相关环境包括中文的一套流程{收集和整理},gitlab的使用
【工具】新手礼包之git相关环境包括中文的一套流程{收集和整理} git Git 详细安装教程(详解 Git 安装过程的每一个步骤) TortoiseGit 【TortoiseGit】TortoiseGit安装和配置详细说明...
篇章十一 打包构建工具
文章目录 一、gulp1. 流2. gulp 的作用3. gulp 的安装、检测和卸载 二、webpack1. 打包样式资源2. 打包 html 资源3. 打包图片资源4. 压缩 html 代码5. 生产环境基本配置 三、vite 打包构建工具,都是依赖于 node 环境进行开发,底层封装的内容就是 node 里…...
2026 年 OpenClaw 生态选型指南:从「红色龙虾」到国产「小龙虾」
2026 年初,一只名为 OpenClaw 的「红色龙虾」长期占据 GitHub 热度前列,星标在公开页面上已达到 三十万量级(具体数字每日波动)。业界常把它描述为 AI 从「只会聊」走向「能替你办事」的一块试金石:不是多一个聊天窗口…...
ONLYOFFICE安全集成避坑指南:Java Web应用中的权限控制与回调处理
ONLYOFFICE安全集成避坑指南:Java Web应用中的权限控制与回调处理 在数字化转型浪潮中,企业文档协作平台的安全集成已成为技术架构的关键环节。ONLYOFFICE作为一款支持实时协作的开源办公套件,其与Java Web应用的深度集成能够满足金融、医疗…...
HackRF玩家必备:PortaPack H2固件刷写与Mayhem固件配置全攻略
HackRF玩家进阶指南:PortaPack H2固件刷写与Mayhem实战配置 无线电爱好者们对HackRF的探索从未停止,而PortaPack H2扩展板的出现让这款开源SDR设备真正实现了"口袋实验室"的愿景。不同于市面上简单的使用说明,本文将带你深入理解Po…...
5分钟解决PDF转Markdown痛点:Marker工具全场景应用指南
5分钟解决PDF转Markdown痛点:Marker工具全场景应用指南 【免费下载链接】marker 一个高效、准确的工具,能够将 PDF 和图像快速转换为 Markdown、JSON 和 HTML 格式,支持多语言和复杂布局处理,可选集成 LLM 提升精度,适…...
终极指南:掌握Starlight文档导航自定义排序的7个高级技巧
终极指南:掌握Starlight文档导航自定义排序的7个高级技巧 【免费下载链接】starlight 🌟 Build beautiful, accessible, high-performance documentation websites with Astro 项目地址: https://gitcode.com/gh_mirrors/st/starlight Starlight是…...
智慧城市中的时空AI:从路网数据到拥堵预测的完整项目拆解
智慧城市中的时空AI:从路网数据到拥堵预测的完整项目拆解 在省会城市早高峰的主干道上,交通信号灯与车流形成一场看不见的博弈。传统基于固定配时的信号控制系统,往往在突发拥堵面前显得力不从心。而某市"交通大脑"的落地案例显示&…...
比迪丽LoRA模型Ubuntu部署教程:3步完成环境配置与启动
比迪丽LoRA模型Ubuntu部署教程:3步完成环境配置与启动 想在自己的Ubuntu服务器上体验比迪丽LoRA模型,生成风格独特的AI图像,但被复杂的部署步骤劝退?别担心,这篇教程就是为你准备的。我们绕开那些繁琐的源码编译和环境…...
Qwen2.5-7B-Instruct升级体验:从1.5B到7B,感受旗舰模型的能力跃升
Qwen2.5-7B-Instruct升级体验:从1.5B到7B,感受旗舰模型的能力跃升 1. 引言:从轻量到旗舰的进化之路 作为长期关注开源大模型的技术从业者,我见证了Qwen系列模型的快速迭代。从最初的1.5B轻量版到如今的7B旗舰版,Qwen…...
Nomic-Embed-Text-V2-MoE实战:构建智能文档检索系统与MySQL集成
Nomic-Embed-Text-V2-MoE实战:构建智能文档检索系统与MySQL集成 1. 引言 想象一下,你所在的公司有成千上万份产品手册、技术文档和合同文件,它们散落在各个文件夹里,格式五花八门。当你想找一份关于“如何解决产品X在低温环境下…...
Betaflight 4.5配置文件升级实战:从STM32H743到AOCODARC H7Dual的硬件适配指南
Betaflight 4.5硬件适配深度解析:从STM32H743到AOCODARC H7Dual的实战迁移指南 穿越机飞控系统的核心在于硬件与软件的完美协同,而Betaflight作为开源飞控领域的标杆,其4.5版本在硬件抽象层进行了重大革新。本文将聚焦STM32H743芯片与AOCODAR…...
