在 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++ 中对插值坐标进行排序和搜索的主要内容,如果未能解决你的问题,请参考以下文章