从路径内部选择点的最有效方法是什么

时间:2012-01-19 15:01:49

标签: algorithm math computer-science computational-geometry

拥有路径,例如:map of guatemala

由一组点'p'组成

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

crudely placed points

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

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

enter image description here

绿色集合将在内部,黑色外部和橙色将再次迭代几次

enter image description here

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

5 个答案:

答案 0 :(得分:4)

考虑一下多边形点测试文献。

有了这么多的分数,我可以想象一个明智的方法是明智和有效的。远远超过你想要做的迭代事情。

答案 1 :(得分:0)

当然,它可能。但是不知道找到这些区域的成本是多少,也不知道将点划分为内部和外部的成本是多少。在外面,没有办法评估它的效率。

答案 2 :(得分:0)

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

本质上,对点进行随机抽样,并测试它们是在内部还是外部以构建地图。重复几次采样方法,直到你有足够好的地图。您可以调整样本数和重复次数,以平衡效率和结果。

答案 3 :(得分:0)

类似(即几何而非空间)的方法可能是首先使用凸包来排除明确路径之外的点。

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

不幸的是,仅凭这一点并不能保证有效的查询(因为特定节点的子节点的深度或数量没有上限;还要注意,即使路径没有,子节点也可以重叠。 )。你仍然需要某种形式的加速结构 - 但是现在你的区域是凸起的,这应该会更加容易。

答案 4 :(得分:0)

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