给定一个 kd 树状网格,如何找到两条最近的相交线

Given a kd tree-like grid, how to find two nearest intersecting lines

假设我有一个如下图所示的网格结构:

给定点D,我想找到与D创建的线相交的最近的点。

我需要一种方法来找到 CE,但找不到 AB

A 不是候选者,因为它与 D.

平行运行

B 不是候选者,因为它不与 D 相交。

我正在尝试找到存储此数据的最佳数据结构,以及设计支持此搜索的算法的最佳方法。我看过 KD 树,但我需要能够为每个点指定线维度。

我需要一个数据结构也需要为垂直和水平段的任意组合工作,例如:

在此示例中,如果我们在哪里搜索 A,我们将 return 只是 C

最后:

在这个例子中,如果我们在哪里搜索 A,我们将 return 什么都没有。

我最终将其实现为一个有向的、未加权的图表。图中的每个顶点都是一条线,具有 X、Y 坐标和方向。

顶点通过方向关系连接到它的父级。使用 X、Y 坐标和图形的层次结构,我们可以准确地重新创建布局。