随机矩形放置与最小的重叠和良好的分散

本文关键字:重叠 分散 随机 | 更新日期: 2023-09-27 18:04:14

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

现在我有一个小矩形,它在外面,我必须把它放在大矩形里面,这样它是:-不与其他小矩形重叠,除非由于缺乏空间而必要(并且,在这种情况下,与最小的重叠)。

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

在谷歌上,我发现了几种关于矩形打包、最大空矩形、随机分布的算法……但是没有什么能真正满足我的需求,也没有一个好的代码实现。

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

随机矩形放置与最小的重叠和良好的分散

你的问题太模糊,太困难了,任何人都无法发布解决方案;这不是一个解决方案。相反,它是如何解决这类问题的一个教训。从这段开始:

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

也许在你看书的时候拿一本。

正如Polya所言

如果你不能解决一个问题,那么还有一个更容易的问题你可以解决:找到它。

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

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

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

你能给我写一个解决c#中那个问题的方法吗?相信我,如果你不能解决简单的问题,那么你永远也解决不了矩形的问题。

如果你不能解决这个问题,那么再次让它变得更容易,直到你可以解决它。如果n永远不大于200呢?如果现有段的集合只有零个、一个或两个元素怎么办?如果新段的长度总是3呢?如果你不再需要随机性呢?如果你解决了最小化问题呢?等等......继续使问题变得简单,直到你能解决它为止。一旦你有了一个简单问题的解决方案,试着把它变成一个更大问题的解决方案。通过练习解决简单的问题,你将获得解决困难问题的洞察力。

根据您的需要,有些东西可能已经存在了。例如,如果你正在开发一个web应用程序,那么看看jQuery砌体:http://masonry.desandro.com/demos/basic-multi-column.html.

如果代码满足你的需要,但你不是在做一个web应用程序,那么也许你可以检查源代码来得到你需要的。