【问题标题】:What is the most efficient way to select points from inside a path从路径内选择点的最有效方法是什么
【发布时间】:2012-01-19 15:01:48
【问题描述】:

有路径,例如:

由一组点'p'组成

我有一组随机放置的点,包括内部和外部。叫'n'

因此,要将内部的所有点与通往随机点的路径上的点进行比较,可能会呈指数级复杂。如果我没记错的话,像 O(n) = n^p 它是 O(n) = n*p

因此,为了解决这个问题,我认为您可以将路径细分为完全在外部的最小区域,而其他完全在内部的区域。如图

绿色的集合在里面,黑色的在外面,橙色的要重复几次

这可能吗,更重要的是,它是否有效?

【问题讨论】:

    标签: algorithm math computer-science computational-geometry


    【解决方案1】:

    考虑查看多边形测试文献。

    有了这么多的点,我可以想象一个 y-sweeping 方法是明智和高效的。远不止你想要做的这个迭代。

    【讨论】:

    • 无论如何,复杂度是 O(np) 而不是 O(n^p)。
    • 谢谢,这正是我想要的。我将阅读该主题,似乎是一个有趣的研究课题。
    【解决方案2】:

    当然,有可能。但是,如果不知道找到这些区域的成本是多少,也不知道将点划分为内部和外部的成本是多少,就无法评估其效率。

    【讨论】:

      【解决方案3】:

      基于抽样的方法可能是您的最佳选择。不是粒子过滤器,而是同一种想法。顺序蒙特卡罗方法也值得研究。
      http://en.wikipedia.org/wiki/Particle_filter
      http://en.wikipedia.org/wiki/Monte_Carlo_method

      基本上,对这些点进行随机抽样并测试它们是在内部还是外部,以构建您的地图。多次重复示例方法,直到获得足够好的地图。您可以调整样本数和重复次数以平衡效率和结果。

      【讨论】:

        【解决方案4】:

        一种类似的(即几何而不是空间)方法可能是首先使用凸包来排除绝对在路径之外的点。

        然后,递归地将路径分解为不在外壳上的子路径(称为“凹面”),并对它们应用相同的凸包方法。您最终将得到一棵区域树(每个区域都由其根部的凸包界定),这样所有子项都将从其父项定义的凸界中减去。

        不幸的是,仅此一项并不能保证有效的查询(因为特定节点的深度或子节点数量没有上限;另请注意,即使路径不重叠,子边界也可能重叠...... .)。你仍然需要某种形式的加速结构——但既然你的区域是凸的,那应该会容易得多。

        【讨论】:

          【解决方案5】:

          您的路径的原始表示是什么?隐式函数?参数?位图?折线?...答案因此而异

          【讨论】:

          • 我提到了将路径作为一组点,例如多边形。一般建议以及在哪里寻找其他形式也将不胜感激。
          猜你喜欢
          • 2019-06-29
          • 2019-12-14
          • 1970-01-01
          • 1970-01-01
          • 2011-10-04
          • 1970-01-01
          • 2020-04-22
          • 2012-04-20
          • 2011-06-10
          相关资源
          最近更新 更多