我给了一个随机的形状,其中我想放置4个(或任何其他数字)点。点应被分布,以使其Voronoi-Diagram的所有区域都具有相同的面积大小,并具有尽可能大的面积。我想找到一种可以在Python中实现的算法。 任何想法如何开始?
该算法应该找到正在发现房间的一群无人机的最佳分布。
答案 0 :(得分:1)
一种自然的方法是选择一些任意起点,然后应用Lloyd algorithm反复将站点移至其Voronoi中心。不能保证获得最佳配置,但是通常只需几个步骤就可以提供非常好的(几乎是局部最佳的)配置。
实际上,代码中最丑陋的部分是将Voronoi细胞限制在多边形区域内。请参见讨论here和here,以及该问题的其他重复内容。
这是一种可能更容易快速实施的替代方法。 Rasterize您的多边形域,计算多边形内部的有限点集。现在运行k-means clustering,它只是劳埃德方法的离散变体(也是in scipy)来查找您的位置。这样,您就无需修剪修剪无限的Voronoi像元,而仅需依赖于几何内部-外部测试来对输入多边形进行栅格化。结果具有明显的准确性-性能折衷:离散化域越精细,花费的时间越长。但是在实践中,绝大多数好处(获得合理平衡的分区)都带有一个粗略的近似值和一些聚类迭代。
最后,如果您需要使用测地距离,而该距离不允许站点直接在域的非拐角周围看到,则实现事情要复杂得多。 (例如,请参见图2a here。)