algorithm - 在图中找到最近的边

标签 algorithm geometry computational-geometry graph-algorithm

我想在图中找到最近的边。考虑以下示例: yellow: vertices, black: edges, blue: query-point

图 1:黄色: 顶点,黑色: 边,蓝色: 查询点

一般信息: 该图包含大约 1000 万个顶点 和大约 1500 万个边。每个顶点都有坐标。边由两个相邻的顶点定义。

最简单的解决方案: 我可以简单地计算从查询点到图中所有其他边的距离,但这会非常慢。

思路与难点: 我的想法是使用一些空间索引来加速查询。我已经实现了一个 kd-tree 来找到最近的顶点。但如图 1 所示,入射到最近顶点的边不一定最接近查询点。我会得到边缘 3-4 而不是更近的边缘 7-8

问题: 是否有一种算法可以找到图中最近的边?

最佳答案

一个非常简单的解决方案(但可能不是复杂度最低的解决方案)是使用 quad tree基于边界框的所有边缘。然后,您只需提取离查询点最近的边集并迭代它们以找到最近的边。

四叉树返回的提取边集应该比原来的 1500 万条边小很多倍,因此迭代的成本要低得多。

四叉树是一种比 R 树更简单的数据结构。它相当普遍,在许多环境中应该很容易获得。例如,在 Java 中 JTS Topology Suite有一个结构 QuadTree 可以很容易地包装来执行这个任务。

关于algorithm - 在图中找到最近的边,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19892564/

相关文章:

algorithm - 如何检查矩形和多边形的交集?

javascript - 获取大量元素的第 n 个排列

regex - 如何在 perl 中打印特定格式的数组?

找到最少的矩形以覆盖一组矩形而不重叠的算法

python - 2d 图像点和 3d 网格之间的交点

algorithm - 检查是否存在圆

r - 给定圆上的点,找到可以用穿过圆心的线分开的最少点数

algorithm - 具有附加约束的线性分配

javascript - 算法:生成小马移动到所有棋盘格的路径

geometry - 删除多边形中的孔