【问题标题】:Distance from ellipses to static set of polygons从椭圆到静态多边形集的距离
【发布时间】:2018-04-07 21:08:00
【问题描述】:

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

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

我考虑了一些方法,包括 Voronoi 图和 R-trees 和 kd-trees。但是,其中大多数似乎都涉及点,我不确定如何将它们扩展到多边形。我认为最有前途的方法包括为每个多边形和椭圆计算边界框,并使用 R-tree 来查找附近的一组多边形。但是,我并不是很想找到这组紧密的多边形的最佳方法。或者我忽略了一个更好的方法。

【问题讨论】:

  • 你如何表示你的椭圆? TTBOMK 没有库功能。
  • 请确认椭圆有任意方向和大小。
  • 是的,椭圆有任意方向和大小。我目前用一个点和两个距离(半长轴和半短轴)表示它们,但如果需要,我愿意更改表示。
  • 更正:我的意思是两个向量,不是两个距离,抱歉。

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


【解决方案1】:

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

假设您使用圆盘并将椭圆括在圆盘中。您将需要执行修改后的最近邻搜索,以枚举磁盘,使其与查询磁盘的距离的下限小于目前找到的最佳上限。

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

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

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

【讨论】:

  • 也许不是最清楚的解释,说起来容易做起来难,但我很确定修改后的 k-D 树方法可以工作,只要多边形足够稀疏。其他加速 2D 范围搜索的设备或许可以做到。
  • 我想我理解这种方法,我知道这将如何加快搜索速度。我正在考虑的一种情况是,当我得到对抗性多边形时,该多边形与椭圆相当接近,但距离的上限则远得多。但是,我认为我可以通过计算到多边形的真实距离来减轻这种情况,以获得更紧密的距离限制。但是,是的,我想我现在会尝试在带有边界框的 boost 中使用 rtree 实现,看看它的效果如何。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-10-28
  • 1970-01-01
  • 2014-05-06
  • 2012-06-14
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多