随机矩形放置,重叠最小,分散性好

时间:2013-03-17 15:57:39

标签: c# random geometry distribution bin-packing

我有一个大矩形(面向轴),包含许多小矩形(与父级的方向相同,固定大小为82x176像素)。

现在我有一个外面的小矩形,我必须把它放在大矩形内,这样它是: - 随机放置; - 除非由于空间不足(在这种情况下,最小重叠),否则不会与其他小矩形重叠。

该算法将在我的代码执行期间多次使用,还需要包含一个良好的分布,以便小矩形将很好地分散在大矩形的中心周围,而不是全部聚集在一个角落。

谷歌搜索,我找到了几个有关矩形包装,最大空矩形,随机分布的算法......但没有真正满足我的要求,也没有显示出良好的代码实现。

有没有人有任何好的想法(代码或伪代码更好,如果可能的话,因为通常我的大脑在看到数学公式时会崩溃)?

2 个答案:

答案 0 :(得分:2)

你的问题太模糊了,而且很难让任何人发布解决方案;这不是解决方案。相反,它是如何攻击此类问题的教训。首先阅读:

http://en.wikipedia.org/wiki/How_to_Solve_It

也许在你看书时拿起一本书。

正如波利亚明智地说的那样

  

如果你无法解决问题,那么你可以解决一个更容易的问题:找到它。

以下是您问题的简单版本:

  

我有一条直线。在这一行,我有一系列线段。集合中每个线段的起点和终点都在0和一些参数n之间,包括端点。某些线段可能相互重叠。

     

给定新线段的长度(小于n),随机放置新线段,使其起点和终点都在0和n之间,并且它不会“重叠”集合中的任何线段。如果无法执行此操作,则计算新线段的开始和结束坐标,以最小化其重叠量。

你能给我写一个解决<#> 问题的解决方案吗?相信我,如果你无法解决更容易的问题,那么你永远不会解决矩形版本。

如果你无法解决那个问题,那么再次使其更容易,直到你可以解决它。如果n永远不超过200怎么办?如果现有段的集合仅包含零个,一个或两个元素,该怎么办?如果新段的长度总是三个怎么办?如果你摆脱了随机性的要求怎么办?如果你摆脱了最小化问题怎么办?等等。 继续使问题变得简单直到你能解决它。一旦你有了解决更简单问题的解决方案,试着让它适应更大问题的解决方案。通过练习解决更简单的问题,您将深入了解解决更难的问题。

答案 1 :(得分:0)

根据您的需要,可能已存在某些内容。例如,如果您正在开发Web应用程序,请查看jQuery Masonry:http://masonry.desandro.com/demos/basic-multi-column.html

如果该代码满足您的需求,但您没有使用网络应用,那么您可以检查源代码以获得所需内容。

希望这有帮助。