0

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

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

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

谷歌搜索,我发现了几种关于矩形打包、最大空矩形、随机分布的算法......但没有什么能真正满足我的要求,也没有显示出良好的代码实现。

有没有人有什么好主意(代码或伪代码更好,如果可能的话,通常当我看到数学公式时我的大脑会崩溃)?

4

2 回答 2

2

您的问题太模糊,太难了,任何人都无法发布解决方案;这不是解决方案。相反,它是如何解决这类问题的一个教训。从阅读以下内容开始:

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

也许在你读这本书的时候拿起一本。

正如波利亚明智地说

如果你不能解决一个问题,那么你可以解决一个更简单的问题:找到它。

这是您的问题的一个更简单的版本:

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

给定一条小于 n 的新线段长度,随机放置新线段,使其起点和终点都在 0 和 n 之间,并且它不会“重叠”集合中的任何线段。如果这样做是不可能的,则计算新线段的开始和结束坐标,以最小化它的重叠量。

你能用C#给我写一个解决这个问题的方法吗?相信我,如果你不能解决更简单的问题,那么你将永远无法解决矩形版本。

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

于 2013-03-18T01:42:41.723 回答
0

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

如果该代码满足您的需求,但您不是在做一个网络应用程序,那么也许您可以检查源代码以获得您需要的东西。

希望这可以帮助。

于 2013-03-18T01:53:09.380 回答