从椭圆到静态多边形集的距离
Distance from ellipses to static set of polygons
我有一组静态的简单多边形(它们可能是非凸的但不是自相交的)和大量的查询椭圆。假设这一切都是在 2D 中完成的。我需要找到每个椭圆和最接近该椭圆的多边形之间的距离。距离分别定义为椭圆和多边形上任意两点之间的最短距离。如果椭圆与多边形相交,那么我们可以说距离为 0 或指定一些负值。
强力方法会简单地计算每个椭圆和每个多边形之间的距离,以及 return O(mn) 时间内的最短距离,其中 m 是多边形的数量,n 是顶点的平均数量每个多边形。我想在这里减少 m 项,因为我认为我可以通过一些空间分析剔除正在考虑的多边形数量。
我考虑了一些方法,包括 Voronoi 图以及 R 树和 kd 树。但是,其中大部分似乎都涉及点,我不确定如何将它们扩展到多边形。我认为最有前途的方法涉及计算每个多边形和椭圆的边界框,并使用 R 树找到一些附近的多边形集。但是,我不太了解找到这组紧密多边形的最佳方法。或者我忽略了一个更好的方法。
使用边界框或圆盘的好处是可以将计算距离 ellipse/polygon 的工作量减少到 O(1)。它允许您获得真实距离的下限和上限。
假设您使用圆盘并将椭圆包围在一个圆盘中。您将需要执行修改后的最近邻搜索,枚举磁盘,使其与查询磁盘的距离下限小于目前找到的最佳上限。
这可以通过在磁盘中心构建的 k-D 树 (D=2) 来加速。您可以使用其根子树中最大和最小圆盘的半径来增强 k-D 树中的每个节点。在搜索过程中,您将使用此信息来评估边界,而无需知道圆盘的确切半径,但您在树中越深入,您就越了解它们。
执行搜索以获得距离的最紧上限,然后进行第二次搜索以枚举下限小于最紧上限的所有圆盘。这将减少要考虑的磁盘数量。
您还可以使用边界框,并将框的 min/max width/height 存储在树节点中。
我有一组静态的简单多边形(它们可能是非凸的但不是自相交的)和大量的查询椭圆。假设这一切都是在 2D 中完成的。我需要找到每个椭圆和最接近该椭圆的多边形之间的距离。距离分别定义为椭圆和多边形上任意两点之间的最短距离。如果椭圆与多边形相交,那么我们可以说距离为 0 或指定一些负值。
强力方法会简单地计算每个椭圆和每个多边形之间的距离,以及 return O(mn) 时间内的最短距离,其中 m 是多边形的数量,n 是顶点的平均数量每个多边形。我想在这里减少 m 项,因为我认为我可以通过一些空间分析剔除正在考虑的多边形数量。
我考虑了一些方法,包括 Voronoi 图以及 R 树和 kd 树。但是,其中大部分似乎都涉及点,我不确定如何将它们扩展到多边形。我认为最有前途的方法涉及计算每个多边形和椭圆的边界框,并使用 R 树找到一些附近的多边形集。但是,我不太了解找到这组紧密多边形的最佳方法。或者我忽略了一个更好的方法。
使用边界框或圆盘的好处是可以将计算距离 ellipse/polygon 的工作量减少到 O(1)。它允许您获得真实距离的下限和上限。
假设您使用圆盘并将椭圆包围在一个圆盘中。您将需要执行修改后的最近邻搜索,枚举磁盘,使其与查询磁盘的距离下限小于目前找到的最佳上限。
这可以通过在磁盘中心构建的 k-D 树 (D=2) 来加速。您可以使用其根子树中最大和最小圆盘的半径来增强 k-D 树中的每个节点。在搜索过程中,您将使用此信息来评估边界,而无需知道圆盘的确切半径,但您在树中越深入,您就越了解它们。
执行搜索以获得距离的最紧上限,然后进行第二次搜索以枚举下限小于最紧上限的所有圆盘。这将减少要考虑的磁盘数量。
您还可以使用边界框,并将框的 min/max width/height 存储在树节点中。