查找给定形状中的4个点的分布,以使Voronoi图的区域具有相同且最大的大小

时间:2019-05-16 10:50:37

标签: python shapes area points voronoi

我给了一个随机的形状,其中我想放置4个(或任何其他数字)点。点应被分布,以使其Voronoi-Diagram的所有区域都具有相同的面积大小,并具有尽可能大的面积。我想找到一种可以在Python中实现的算法。 任何想法如何开始?

该算法应该找到正在发现房间的一群无人机的最佳分布。

1 个答案:

答案 0 :(得分:1)

一种自然的方法是选择一些任意起点,然后应用Lloyd algorithm反复将站点移至其Voronoi中心。不能保证获得最佳配置,但是通常只需几个步骤就可以提供非常好的(几乎是局部最佳的)配置。

实际上,代码中最丑陋的部分是将Voronoi细胞限制在多边形区域内。请参见讨论herehere,以及该问题的其他重复内容。

这是一种可能更容易快速实施的替代方法。 Rasterize您的多边形域,计算多边形内部的有限点集。现在运行k-means clustering,它只是劳埃德方法的离散变体(也是in scipy)来查找您的位置。这样,您就无需修剪修剪无限的Voronoi像元,而仅需依赖于几何内部-外部测试来对输入多边形进行栅格化。结果具有明显的准确性-性能折衷:离散化域越精细,花费的时间越长。但是在实践中,绝大多数好处(获得合理平衡的分区)都带有一个粗略的近似值和一些聚类迭代。

最后,如果您需要使用测地距离,而该距离不允许站点直接在域的非拐角周围看到,则实现事情要复杂得多。 (例如,请参见图2a here。)