我有一个大小为X乘Y的面板。我想在这个面板上放置最多N个随机大小的矩形,但我不希望它们重叠。我需要知道这些矩形的X,Y位置。
有算法可以实现吗?
编辑:所有N个矩形在开始时都已知,并且可以以任何顺序选择。这是否改变了程序?
我有一个大小为X乘Y的面板。我想在这个面板上放置最多N个随机大小的矩形,但我不希望它们重叠。我需要知道这些矩形的X,Y位置。
有算法可以实现吗?
编辑:所有N个矩形在开始时都已知,并且可以以任何顺序选择。这是否改变了程序?
这是一篇有关2D装箱算法的不错文章:http://www.devx.com/dotnet/Article/36005
通常,您需要使用启发式算法来实现良好的结果。一个简单(但非最优)的解决方案是第一适合算法。
我建议你使用StaxMan的建议。
这是我的建议:
随机添加大量矩形(彼此重叠)。 删除重叠的矩形:
for rectangle in list of rectangles:
if rectangle not deleted:
delete all rectangles touching rectangle.
要找到所有与特定矩形相接触的矩形,您可以使用四叉树或基于x1、y1 x2、y2值的不等式。
编辑:实际上,大多数游戏引擎(如pygame等)都包括矩形的碰撞检测,这是一个常见的问题。
或者维护一个已添加的矩形列表,并创建一个算法来确定新矩形的放置位置。您可以创建一个基本的Rectangle类来保存有关矩形的信息。
创建自定义算法应该不难。