问题是我需要在一个任意形状的办公室里分配一些人。每个人的要求都是一样的:尽可能远离办公室的墙壁和其他人。
将办公室视为空白图像。因此,分配人员就像在图像上分配点一样。
我发现的算法很慢:
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。我想知道是否有更好的算法或任何想法我可以优化当前的算法?感谢
答案 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