地理空间-Java实现航迹稀释
Java实现航迹点稀释算法(Douglas - Peucker算法)的示例代码,该算法可在保证航迹整体形状变化不大的情况下减少航迹点数量:
import java.util.ArrayList;
import java.util.List;
class Point {
double x;
double y;
public Point(double x, double y) {
this.x = x;
this.y = y;
}
}
public class TrackThinning {
public static List<Point> douglasPeucker(List<Point> points, double epsilon) {
if (points.size() < 3) {
return points;
}
int index = -1;
double dmax = 0;
int end = points.size();
for (int i = 1; i < end - 1; i++) {
double d = perpendicularDistance(points.get(i), points.get(0), points.get(end - 1));
if (d > dmax) {
index = i;
dmax = d;
}
}
List<Point> result = new ArrayList<>();
if (dmax > epsilon) {
List<Point> recursiveResult1 = douglasPeucker(points.subList(0, index + 1), epsilon);
List<Point> recursiveResult2 = douglasPeucker(points.subList(index, points.size()), epsilon);
result.addAll(recursiveResult1.subList(0, recursiveResult1.size() - 1));
result.addAll(recursiveResult2);
} else {
result.add(points.get(0));
result.add(points.get(points.size() - 1));
}
return result;
}
private static double perpendicularDistance(Point point, Point start, Point end) {
double dx = end.x - start.x;
double dy = end.y - start.y;
double numerator = Math.abs((dy * point.x - dx * point.y) + (end.x * start.y - end.y * start.x));
double denominator = Math.sqrt(dy * dy + dx * dx);
return numerator / denominator;
}
public static void main(String[] args) {
List<Point> points = new ArrayList<>();
points.add(new Point(0, 0));
points.add(new Point(1, 1));
points.add(new Point(2, 2));
points.add(new Point(3, 2));
points.add(new Point(4, 3));
points.add(new Point(5, 4));
double epsilon = 0.5;
List<Point> thinnedPoints = douglasPeucker(points, epsilon);
for (Point p : thinnedPoints) {
System.out.println("(" + p.x + ", " + p.y + ")");
}
}
}
相关文章:
地理空间-Java实现航迹稀释
Java实现航迹点稀释算法(Douglas - Peucker算法)的示例代码,该算法可在保证航迹整体形状变化不大的情况下减少航迹点数量: import java.util.ArrayList; import java.util.List; class Point { double x; double y; public Point…...
qt QHttpMultiPart详解
1. 概述 QHttpMultiPart是Qt框架中用于处理HTTP多部分请求的类。它类似于RFC 2046中描述的MIME multipart消息,允许在单个HTTP请求中包含多个数据部分,如文件、文本等。这种多部分请求在上传文件或发送带有附件的邮件等场景中非常有用。QHttpMultiPart类…...
【测试】【Debug】vscode中同一个测试用例出现重复
这种是正常的情况 当下面又出现一个 类似python_test->文件夹名->test_good ->test_pad 同一个测试用例出现两次,名称都相同,显然是重复了。那么如何解决? 这种情况是因为在终端利用“pip install pytest”安装 之后,又…...
Mac上的免费压缩软件-FastZip使用体验实测
FastZip是Mac上的一款免费的压缩软件,分享一下我在日常使用中的体验 压缩格式支持7Z、Zip,解压支持7Z、ZIP、RAR、TAR、GZIP、BZIP2、XZ、LZIP、ACE、ISO、CAB、PAX、JAR、AR、CPIO等所有常见格式的解压 体验使用下来能满足我所有的压缩与解压的需求&a…...
Linux(CentOS)运行 jar 包
1、在本地终端运行,关闭终端,程序就会终止 java -jar tlias-0.0.1-SNAPSHOT.jar 发送请求,成功 关闭终端(程序也会终止) 发送请求,失败 2、在远程终端运行,关闭终端,程序就会终止 …...
基于YOLOv8 Web的安全帽佩戴识别检测系统的研究和设计,数据集+训练结果+Web源码
摘要 在工地,制造工厂,发电厂等地方,施工人佩戴安全帽能有效降低事故发生概率,在工业制造、发电等领域需要进行施工人员安全帽监测。目前大多数的 YOLO 模型还拘泥于公司、企业开发生产的具体产品中,大多数无编程基础…...
LabVIEW VISA通信常见问题
在工业自动化和测试测量等应用中,使用LabVIEW的VISA函数与设备进行通信时,若发送指令后未能接收数据,以下因素可能是原因: 设备未响应或响应延迟应用示例:例如,在控制测量仪器(如电压表…...
Node.js Stream(流)以及模块系统使用介绍 (基础介绍 五)
Stream(流) Stream 是 Node.js 中非常重要的一个模块,应用广泛。 Stream 是一个抽象接口,Node 中有很多对象实现了这个接口。例如,对http 服务器发起请求的request 对象就是一个 Stream,还有stdout(标准输出…...
嵌入式linux中设备树控制硬件的方法
大家好,今天主要给大家分享一下,如何使用linux系统下的设备树进行硬件控制方法。 第一:linux系统中设备树驱动LED原理 在linux系统中可以使用设备树向Linux内核传递相关的寄存器地址,linux驱动中使用OF函数从设备树中获取所需的属性值,然后使用获取到的属性值来初始化相关…...
定时器入门:Air780E定时器基础与进阶
今天我们学习的是Air780E定时器基础与进阶,让大家更深入的了解定时器。 一、定时器(timer)的概述 在Air780E模组搭载的LuatOS系统中,定时器(timer)是一项基础且关键的服务。它允许开发者在特定的时间点或周期性地执行代码段&…...
Java LeetCode练习
3216. 交换后字典序最小的字符串 package JavaExercise;public class Exercise {public static void main(String[] args) {String s "45320";Solution solution new Solution();System.out.println(solution.getSmallestString(s));} }class Solution {public St…...
go 集成go-redis 缓存操作
一、什么是Go Redis 这是一个流行的Go语言Redis客户端库,它提供了细化的API,对每个Redis命令的功能进行了封装,使得用户只需记住命令,具体的用法可以直接查看接口的声明,使用成本较低。go-redis对数据类型按照Redis底…...
python数据结构基础(3)
书接上文.要创建一个单链表类,首先是初始化方法: class singlelink:def __init__(self):self.head Noneself.tail Noneself.length0return 判断链表是否为空: def isempty(self):return self.length 0 向链表尾部添加节点: def add_node(self,item):if not isinstance(…...
java-智能识别车牌号_基于spring ai和开源国产大模型_qwen vl
用大模型做车牌号识别,最简单高效 在Java场景中,java识别车牌号的需求非常普遍。过去,我们主要依赖OCR等传统方法来实现java识别车牌号,但这些方法的效果往往不稳定。随着技术的发展,现在有了更先进的解决方案——大模…...
全局池化(Global Pooling)
普通池化操作看这里:最大池化(Max Pooling)和平均池化(Average Pooling) 全局池化(Global Pooling) 是一种特殊的池化方法,主要包括: 全局平均池化(Global …...
ubuntu 24.04运行chattts时cuda安装错误原因分析
使用ubuntu 24.04,按照2noise/ChatTTS官方流程安装依赖时报错。ChatTTShttps://github.com/2noise/ChatTTS 这是因为cuda版本不对,ChatTTS目前的版本,要求支持cuda 12.4及以上,但是如果nvidia显卡驱动版本较老,无法支…...
使用 Cypher 查询语言在 Neo4j 中查找最短路径
使用 Cypher 查询语言在 Neo4j 中查找最短路径 引言1. Cypher 查询语言简介2. 查找最短路径的 Cypher 查询3. 代码解释3.1 MATCH 关键字3.2 pshortestPath(3.3 (bacon:Person {name:"Kevin Bacon"})3.4 -[*]-3.5 (meg:Person {name:"Meg Ryan"})3.6 )3.7 R…...
Qt多边形填充/不填充绘制
1 填充多边形绘制形式 void GraphicsPolygonItem::paint(QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *widget) {Q_UNUSED(option);Q_UNUSED(widget);//painter->setPen(pen()); // 设置默认画笔//painter->setBrush(brush()); // 设置默…...
数据结构-数组(稀疏矩阵转置)和广义表
目录 1、数组定义 1)数组存储地址计算示例①行优先②列优先 2)稀疏矩阵的转置三元组顺序表结构定义 ①普通矩阵转置②三元组顺序表转置稀疏矩阵③稀疏矩阵的快速转置 3)十字链表结构定义 2、广义表定义 1)基本操作①GetHead②GetT…...
Java中的远程方法调用——RPC详解
1. 什么是RPC? RPC基础介绍 Java中的远程方法调用(Remote Procedure Call,RPC)是一种允许一个程序调用另一台计算机上方法的技术,就像在本地一样。RPC的核心思想是简化分布式计算,让我们可以跨网络调用远程…...
LeetCode //C - 1002. Find Common Characters
1002. Find Common Characters Given a string array words, return an array of all characters that show up in all strings within the words (including duplicates). You may return the answer in any order. Example 1: Input: words [“bella”,“label”,“roll…...
基于SpringBoot的旅游网站管理系统
源码获取地址: 链接: https://pan.baidu.com/s/1Swe7JUSV7rRuBkagxRgL6g?pwdaufn提取码: aufn(文件先保存到自己网盘,谨防文件丢失!!) 该网站是一个旅游管理系统,旨在为用户提供便捷的旅游信息…...
SEO优化的预算一般应如何合理安排
SEO优化的预算一般应如何合理安排 在当今数字化时代,网站的搜索引擎优化(SEO)已成为提升网站流量和品牌知名度的重要手段。如何合理分配SEO优化预算成为许多企业和网站管理者面临的一个重要课题。本文将从问题分析、原因说明、解决方法、注意…...
避开高速接口时序坑:用IDELAY2和ODDR实战优化FPGA的input delay约束
高速接口时序优化实战:IDELAY2与ODDR的精细控制艺术 当FPGA设计遭遇GHz级高速接口时,传统的时序约束方法往往捉襟见肘。我曾在一个25Gbps背板项目中发现,即使精确计算了input delay约束,时序报告仍显示关键路径存在0.3ns的违例—…...
新手开发者的第一课:用快马打造零基础的mc指令学习助手
作为一个刚接触《我的世界》指令系统的玩家,我最初完全搞不懂那些复杂的斜杠命令。直到自己动手做了一个指令查询工具,才发现原来理解指令可以这么简单。今天就来分享如何用InsCode(快马)平台快速打造一个零基础友好的MC指令助手。 为什么需要专门的指令…...
3个高效技巧:用Elsevier Tracker实现投稿状态智能监控
3个高效技巧:用Elsevier Tracker实现投稿状态智能监控 【免费下载链接】Elsevier-Tracker 项目地址: https://gitcode.com/gh_mirrors/el/Elsevier-Tracker 你是否也曾经历过这样的科研日常:每天打开Elsevier投稿系统,重复登录、点击…...
Flac3d6.0源代码(含巷道开挖、支护与充填开采三组代码)直接导入运行版,附汉语注释说明
Flac3d6.0源代码,用于巷道支护,煤层开采和充填,代码可直接导入运行,并有汉语注释说明每句代码含义,适合初学者用来学习。 直接联系。 包含三组代码: (1)巷道开挖:研究巷道…...
HoRain云--Bootstrap5图像形状全攻略
🎬 HoRain 云小助手:个人主页 ⛺️生活的理想,就是为了理想的生活! ⛳️ 推荐 前些天发现了一个超棒的服务器购买网站,性价比超高,大内存超划算!忍不住分享一下给大家。点击跳转到网站。 目录 ⛳️ 推荐 …...
KeyboardChatterBlocker:如何解决机械键盘的“幽灵按键“问题?
KeyboardChatterBlocker:如何解决机械键盘的"幽灵按键"问题? 【免费下载链接】KeyboardChatterBlocker A handy quick tool for blocking mechanical keyboard chatter. 项目地址: https://gitcode.com/gh_mirrors/ke/KeyboardChatterBlocke…...
hadoop+Spark+django基于Spark的影视作品排行榜数据分析和可视化
前言 本研究基于 Spark 框架,构建了一套与可视化系统,旨在为影视行业相关方提供有力支持。研究结合了网络爬虫、Spark 框架、Vue 和 Echarts 等技术,并采用文献研究法展开。 在数据采集阶段,使用 Python 爬虫从多个数据源获取…...
