kdtree.net库
按指定距离阈值匹配两个X维点数组的高速实现库。using KdTree.Math; using KdTree; using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Windows.Forms; using System.Diagnostics; namespace WindowsFormsApp_KdTree { public partial class Form1 : Form { public Form1() { InitializeComponent(); } private void button1_Click(object sender, EventArgs e) { var tree new KdTreedouble, string(2, new DoubleMath()); var rand new Random(); var setA new ListDefectPoint(); var setB new ListDefectPoint(); for (var i 1; i 30000; i) { setA.Add(new DefectPoint(((float)rand.NextDouble() - 0.5f) * 150, ((float)rand.NextDouble() - 0.5f) * 150, i)); setB.Add(new DefectPoint(((float)rand.NextDouble() - 0.5f) * 150, ((float)rand.NextDouble() - 0.5f) * 150, i)); } // 距离阈值 float threshold 3.0f; var stop new Stopwatch(); stop.Start(); var result DefectMatcher.Match(setA, setB, threshold); stop.Stop(); Console.WriteLine($成功匹配对数: {result.Matched.Count}); Console.WriteLine($A独有缺陷(新增): {result.OnlyA.Count}); Console.WriteLine($B独有缺陷(消失): {result.OnlyB.Count} {stop.ElapsedMilliseconds}ms); } } public static class DefectMatcher { /// summary /// KDTree实现两组二维缺陷点匹配 /// /summary public static MatchResult Match(ListDefectPoint setA, ListDefectPoint setB, float distanceThreshold) { // 1. 基准集合B构建KDTree存储原始索引 var tree new KdTreefloat, int(2, new FloatMath()); for (int i 0; i setB.Count; i) { var p setB[i]; tree.Add(new[] { p.X, p.Y }, i); } // 收集所有候选匹配 (A索引,B索引,距离平方) var candidates new List(int aIdx, int bIdx, double distSq)(); double threshSq distanceThreshold * distanceThreshold; for (int aIdx 0; aIdx setA.Count; aIdx) { var pa setA[aIdx]; var pos new[] { pa.X, pa.Y }; // 半径搜索 var nearList tree.RadialSearch(pos, distanceThreshold); foreach (var near in nearList) { int bIdx near.Value; var pb setB[bIdx]; double dx pa.X - pb.X; double dy pa.Y - pb.Y; double distSq dx * dx dy * dy; if (distSq threshSq) { candidates.Add((aIdx, bIdx, distSq)); } } } // 贪心匹配距离近优先保证一对一防止一对多 var sorted candidates.OrderBy(x x.distSq).ToList(); bool[] usedA new bool[setA.Count]; bool[] usedB new bool[setB.Count]; var matchedPairs new List(DefectPoint A, DefectPoint B)(); foreach (var item in sorted) { if (!usedA[item.aIdx] !usedB[item.bIdx]) { usedA[item.aIdx] true; usedB[item.bIdx] true; matchedPairs.Add((setA[item.aIdx], setB[item.bIdx])); } } // 提取独有点 var onlyA setA.Where((_, i) !usedA[i]).ToList(); var onlyB setB.Where((_, i) !usedB[i]).ToList(); return new MatchResult { Matched matchedPairs, OnlyA onlyA, OnlyB onlyB }; } } public class MatchResult { public List(DefectPoint A, DefectPoint B) Matched { get; set; } public ListDefectPoint OnlyA { get; set; } public ListDefectPoint OnlyB { get; set; } } public struct DefectPoint { public float X { get; set; } public float Y { get; set; } public int Id { get; set; } public DefectPoint(float x, float y, int id) { X x; Y y; Id id; } } }10000vs10000耗时0.23s30000vs30000耗时1.9s50000vs50000耗时5.4s100000vs100000耗时30s不算最高效数据较多需选其他c的库如opencv或FLANN实现

相关新闻

南洋理工大学推出Apple-π

南洋理工大学推出Apple-π

这项由新加坡南洋理工大学S-Lab与香港中文大学联合开展的研究,以预印本形式于2026年7月17日发布在arXiv平台,论文编号为arXiv:2507.16401。有兴趣深入了解的读者可通过该编号检索完整论文。**一道关于苹果落地的问题,难倒了当今最先进的AI视频…

2026/7/31 2:13:40阅读更多 →
国内做工厂AR运维系统的公司有哪些

国内做工厂AR运维系统的公司有哪些

国内工厂AR运维系统技术选型与架构解析:从远程协作到数字孪生 在工业4.0的深水区,传统运维模式正面临严峻挑战。设备复杂度指数级上升,而资深专家资源稀缺且分布不均,导致现场故障排查周期长、差旅成本高、知识沉淀难。增强现实&a…

2026/7/31 2:11:40阅读更多 →
迈向晚期TNBC一线治疗!芦康沙妥珠单抗(sac-TMT)第六项NDA获受理

迈向晚期TNBC一线治疗!芦康沙妥珠单抗(sac-TMT)第六项NDA获受理

2026年7月30日,四川科伦博泰生物医药股份有限公司(下称“科伦博泰”或“公司” 6990.HK)宣布,公司自主研发的靶向人滋养细胞表面抗原2(TROP2)的抗体偶联药物(ADC)芦康沙妥珠单抗(sac-TMT, 亦称SKB264/MK-2870)(佳泰莱)的一项新增适应症上市申请已获中国国…

2026/7/31 2:11:39阅读更多 →
Flutter Text组件溢出问题解决方案与布局原理

Flutter Text组件溢出问题解决方案与布局原理

1. 问题现象:Text组件为何频频溢出?在Flutter开发中,Text组件溢出堪称"新手杀手"。最常见的情况是:明明给Text设置了宽度约束,文字却像脱缰野马般冲出容器边界,右侧出现刺眼的黄色溢出警告条。更…

2026/7/31 3:15:13阅读更多 →
SpringBoot+Vue实现OA管理系统全栈开发指南

SpringBoot+Vue实现OA管理系统全栈开发指南

1. 项目概述:基于SpringBootVue的OA管理系统设计与实现这个毕业设计项目采用当前企业级开发中最流行的前后端分离架构,后端使用SpringBoot框架,前端采用Vue.js技术栈,构建一个完整的办公自动化(OA)管理系统。作为计算机专业学生的…

2026/7/31 3:15:13阅读更多 →
SSM框架实现Web问卷调查系统开发全解析

SSM框架实现Web问卷调查系统开发全解析

1. 项目概述:基于SSM框架的Web问卷调查系统这个基于SSM框架的Web问卷调查系统是一个典型的Java Web应用开发案例,它完整覆盖了从开发环境搭建到生产部署的全流程。系统采用SpringSpringMVCMyBatis(SSM)这一经典JavaEE技术栈&#…

2026/7/31 3:15:13阅读更多 →
Java双端队列Deque核心方法详解:poll与peek的区别与应用场景

Java双端队列Deque核心方法详解:poll与peek的区别与应用场景

1. 从队列操作说起:为什么这四个方法值得深究?如果你用过Java里的LinkedList,或者更时髦的ArrayDeque,那你大概率见过pollFirst(),pollLast(),peekFirst(),peekLast()这几个方法。名字看起来都差不多,功能也似乎都是“…

2026/7/31 3:15:13阅读更多 →
异或运算核心原理与应用:从逻辑门到算法实战

异或运算核心原理与应用:从逻辑门到算法实战

1. 从“找不同”到“逻辑开关”:异或运算的直觉建立 在编程和数字电路的世界里,有一个运算符,它看似简单,却无处不在,从最简单的数据校验到复杂的加密算法,再到一些巧妙的算法技巧,都离不开它的…

2026/7/31 3:15:12阅读更多 →
慢速英语听力训练:Mr. English系列51-100集实操指南

慢速英语听力训练:Mr. English系列51-100集实操指南

在英语学习过程中,听力往往是许多学习者感到棘手的环节,尤其是对于小学高段以上的学生而言,面对语速较快的原声材料时,容易产生挫败感。本文将围绕一套备受好评的慢速英语听力训练资源——"Mr. English"系列&#xff08…

2026/7/31 3:12:50阅读更多 →
覆盖国产 + 海外 + 开源模型,OpenClaw 2.7.9 Windows/Mac 双端部署详解

覆盖国产 + 海外 + 开源模型,OpenClaw 2.7.9 Windows/Mac 双端部署详解

🔹 工具基础介绍 OpenClaw 是开源生态中一款实用性较强的本地智能工具,凭借本地离线运行、可视化图形操作和任务自动化三大核心特性,赢得了众多用户的青睐。与普通在线对话AI工具不同,它属于能够直接操控本机软硬件的智能数字员工…

2026/7/30 15:03:16阅读更多 →
伺服阀焊完微漏毁整机?精密激光焊接三关锁住高压

伺服阀焊完微漏毁整机?精密激光焊接三关锁住高压

所谓液压伺服阀体的精密激光焊接,是用激光束对阀座壳体(通常为不锈钢或铝合金)进行密封焊接,使阀体在21-35MPa的高压液压油或压缩气体中长期运行而不发生介质泄漏。液压伺服阀是高端液压系统的"大脑"。从航空航天飞行控…

2026/7/30 12:22:27阅读更多 →
D2DX:三步实现《暗黑破坏神2》高清宽屏体验的终极指南

D2DX:三步实现《暗黑破坏神2》高清宽屏体验的终极指南

D2DX:三步实现《暗黑破坏神2》高清宽屏体验的终极指南 【免费下载链接】d2dx D2DX is a complete solution to make Diablo II run well on modern PCs, with high fps and better resolutions. 项目地址: https://gitcode.com/gh_mirrors/d2/d2dx 你是否还在…

2026/7/30 15:13:02阅读更多 →
物理复制比逻辑复制好在哪?数据库复制原理详解

物理复制比逻辑复制好在哪?数据库复制原理详解

数据库复制是把主库数据同步到备库的机制,分为逻辑复制和物理复制两种。逻辑复制传输的是 SQL 语句或行变更事件,物理复制传输的是存储引擎底层的物理日志。阿里云 PolarDB(云原生数据库)采用物理复制,在同步延迟、数据…

2026/7/31 0:00:40阅读更多 →
BilibiliDown:3分钟学会B站视频下载的终极指南

BilibiliDown:3分钟学会B站视频下载的终极指南

BilibiliDown:3分钟学会B站视频下载的终极指南 【免费下载链接】BilibiliDown (GUI-多平台支持) B站 哔哩哔哩 视频下载器。支持稍后再看、收藏夹、UP主视频批量下载|Bilibili Video Downloader 😳 项目地址: https://gitcode.com/gh_mirrors/bi/Bilib…

2026/7/31 0:00:41阅读更多 →
有哪些游戏数据AI平台?游戏行业Data+AI融合方案盘点

有哪些游戏数据AI平台?游戏行业Data+AI融合方案盘点

当前,游戏行业的“DataAI融合”已从概念验证进入价值落地阶段。根据IDC 2025年数据,中国AI游戏云市场规模已达18.6亿元;同时,游戏研发环节AI渗透率高达86%,生成式AI内容普及率超过50%。面对庞大的市场,游戏…

2026/7/31 0:00:41阅读更多 →
YOLOv8推理性能优化:从1.2FPS到35FPS的全链路加速实践

YOLOv8推理性能优化:从1.2FPS到35FPS的全链路加速实践

如果你在部署 YOLOv8 时,发现推理速度只有可怜的 1-2 FPS,而别人的演示视频却能跑到 30 FPS 以上,那么问题很可能不在模型本身,而在于你的整个处理链路。很多开发者拿到一个训练好的 YOLOv8 模型后,会直接使用官方示例…

2026/7/31 0:49:33阅读更多 →
Coze与Dify对比指南:低代码AI应用开发从入门到实战

Coze与Dify对比指南:低代码AI应用开发从入门到实战

1. 从零到一:为什么你需要了解 Coze 和 Dify?如果你对 AI 应用开发感兴趣,但一看到“大模型”、“智能体”、“工作流”这些词就头疼,觉得门槛太高,那这篇文章就是为你准备的。很多开发者,包括我自己&#…

2026/7/30 4:47:18阅读更多 →
AI生图工具怎么选?2026年6月版实测对比

AI生图工具怎么选?2026年6月版实测对比

做自媒体的朋友应该都有体会:配图一直是个让人头疼的问题。2026年,AI生图工具已经非常成熟了,但工具太多反而不知道怎么选。以下是截至2026年6月我对主流AI生图工具的实测对比。Midjourney V8.1:速度之王2026年6月11日&#xff0c…

2026/7/30 15:43:46阅读更多 →