我有一个问题,我需要在一个圆圈内放入一堆不同大小的矩形。所有矩形必须适合圆圈而不会相互重叠,并且不会溢出圆圈。
假设矩形可以放在圆圈内,那么如何开发一种算法将它们分布在圆圈内?
我能想到的就是一遍又一遍地随机分布矩形并测试是否满足条件(蛮力)。
答案 0 :(得分:2)
这是一个经典的约束问题,蛮力是一种方法,但有其他方法可以更好地使用诸如启发式之类的东西来帮助指导算法到解决方案。你需要在Google Scholar这样的东西上查找一些约束编程和bin打包文件,以获得更好的算法。
维基百科有一个很好的概述: http://en.wikipedia.org/wiki/Packing_problem
答案 1 :(得分:0)
正如其他人所提到的,最佳解决方案(即最小区域或均匀分布)很可能是NP难的。然而,根据您的需要,有一些很好的算法可以将不同大小的矩形打包成其他矩形。例如:Fast Optimizing Rectangle Packing Algorithm for Building CSS Sprites:
本文介绍了一种快速算法,将一系列不同宽度和高度的矩形打包到一个封闭的矩形中,没有重叠,并且最大限度地减少了封闭矩形中浪费空间的数量。 [...]逐步显示算法如何到达最佳包围矩形。
请注意,在上面的过程中,允许边界矩形变化(我也不相信解决方案是最佳封闭矩形)。您可以通过将其分解为离散矩形来近似圆。
虽然不是您正在寻找的完整解决方案,但我认为这可能是迈出良好的第一步。