快速算法,用于在具有非重叠边界的闭合曲线内均匀分布点

时间:2017-03-02 20:35:32

标签: algorithm optimization distance

问题是我需要在一个任意形状的办公室里分配一些人。每个人的要求都是一样的:尽可能远离办公室的墙壁和其他人。

将办公室视为空白图像。因此,分配人员就像在图像上分配点一样。

我发现的算法很慢:

for each people
  do distance transform of the image
  find a point that has the largest distance value
  place a people here
  mark the pixel where the people is as False in the image

该算法进行了几次距离变换并迭代地放置了人。

当有很多人时,算法会变得非常慢,比如说距离变换的迭代使用就是500。我想知道是否有更好的算法或任何想法我可以优化当前的算法?感谢

1 个答案:

答案 0 :(得分:3)

您可以使用质心Voronoi tesselation [1,2]。 该算法的工作原理如下:

(1) distribute the points randomly in the office
(2) Repeat until you are satisfied:
  (2.1) compute the Voronoi diagram (see [3]) of the points
  (2.2) compute the barycenter of the Voronoi cell of each point
  (2.3) move each point to the barycenter of its Voronoi cell

GEOGRAM库中有一个我正在开发的实现[4]。另见我的朋友开发的CGAL库[5]。

[1] https://en.wikipedia.org/wiki/Centroidal_Voronoi_tessellation

[2] https://en.wikipedia.org/wiki/Lloyd%27s_algorithm

[3] https://en.wikipedia.org/wiki/Voronoi_diagram

[4] http://alice.loria.fr/software/geogram/doc/html/index.html

[5] http://www.cgal.org