在 C++ 中对插值坐标进行排序和搜索

Posted

技术标签:

【中文标题】在 C++ 中对插值坐标进行排序和搜索【英文标题】:Sorting and searching coordinates for interpolation in c++ 【发布时间】:2017-03-15 13:20:54 【问题描述】:

我需要做一个最近邻插值程序。

我的输入是一个点的 x、y 和 y 坐标,例如 x=.5, y=.3, z=.1

输出将是在最近可用点测量的速度。由于我有四个向量 x、y、z 和 V,程序将寻找最近的节点,假设它是 x[5239], y[5239], z[5239](对应于 x=.501 y=.299 z=.1),并输出 @ 987654324@.

我正在考虑设置几个参考点(我们称它们为 p 和 q)。我的想法是计算所有节点相对于 p 和 q 的距离。然后根据节点到 p 和 q 的距离对向量进行排序(为此,我需要保留原始索引的引用,以便能够找到 V[i])。之后我可以使用二进制搜索,使用给定点相对于 p 和 q 的距离来找到最近的节点。

我发现可能有用的另一件事是哈希表。如果我的向量中的元素数量约为 96,000 并且我必须执行的插值数量也可能那么多,那么哪一个会更有效。

我将如何关注索引(如 matlab 排序功能)。在这种情况下,您还会推荐哪种排序算法?

谢谢

【问题讨论】:

我认为您最好使用octree。请注意,特定点的“最近邻居”可能不在同一个单元格中 - 因此您需要考虑相邻单元格。 en.wikipedia.org/wiki/Spatial_database#Spatial_index 也可能是一个很好的来源。 我会使用你的帖子开始编码,如果有错误可以查看 【参考方案1】:

Nearest neighbor search 是一个标准问题。您可能正在寻找cover tree。 Wikipedia 文章本身非常简短,但它链接到原始论文和 GitHub 上的实现。

【讨论】:

非常感谢,这个信息很有用

以上是关于在 C++ 中对插值坐标进行排序和搜索的主要内容,如果未能解决你的问题,请参考以下文章

如何在python中对存储xy坐标的二维数组进行排序?

在 C++ 中对向量进行分组排序

在 C++ 中对结构数组进行排序

如何在 C++ 中对以下字符串序列进行排序?

在 C++ 中对字符串数组进行排序

在 C++ 中对对进行排序时出现内存错误