从椭圆到静态多边形集的距离

时间:2018-04-07 21:08:01

标签: algorithm search data-structures computational-geometry boost-geometry

我有一组静态的简单多边形(它们可能是非凸的但不是自相交的)和大量的查询省略号。假设这一切都是在2D中完成的。我需要找到每个椭圆与该椭圆最接近的多边形之间的距离。距离定义为椭圆和多边形上任意两点之间的短距离。如果椭圆与多边形相交,那么我们可以说距离为0或指定一些负值。

蛮力方法只需计算每个椭圆与每个多边形之间的距离,并返回O(mn)时间内的最低距离,其中m是多边形的数量,n是每个多边形的平均顶点数。我想在这里减少m项,因为我认为我可以通过一些空间分析来剔除正在考虑的多边形数量。

我考虑了一些方法,包括Voronoi图和R树和kd树。然而,其中大多数似乎涉及点,我不知道如何将这些扩展到多边形。我认为最有希望的方法是计算每个多边形和椭圆的边界框,并使用R树来查找一组附近的多边形。但是,我并不完全了解找到这组近似多边形的最佳方法。或许还有一种更好的方式让我忽视。

1 个答案:

答案 0 :(得分:0)

使用边界框或磁盘可以减少计算距离椭圆/多边形到O(1)的工作量。它允许您获得真实距离的下限和上限。

假设您使用磁盘并将椭圆括在磁盘中。您需要执行一个修改过的最近邻搜索,它会枚举磁盘,使它们到查询磁盘的距离的下限小于到目前为止找到的最佳上限。

这可以通过在磁盘中心上构建的k-D树(D = 2)来加速。您可以使用其根中的子树中最大和最小磁盘的半径来增强k-D树中的每个节点。在搜索过程中,您将使用此信息来评估边界而不知道磁盘的确切半径,但是您在树中越深入,就越了解它们。

执行搜索以获得距离上最紧密的上限,然后进行第二次搜索以枚举下限小于最小上限的所有磁盘。这将减少要考虑的磁盘数量。

您还可以使用边界框,并在树节点中存储框的最小/最大宽度/高度。