C# 具有最小重叠和良好分散性的随机矩形放置

C# 具有最小重叠和良好分散性的随机矩形放置,c#,random,geometry,distribution,bin-packing,C#,Random,Geometry,Distribution,Bin Packing,我有一个大矩形(面向轴),包含许多小矩形(与父矩形方向相同,固定大小为82x176像素) 现在我有一个小矩形,它在外面,我必须把它放在大矩形里面,这样它是:-随机放置;-不重叠其他小矩形,除非由于缺少空间(在这种情况下,重叠最小) 该算法将在我的代码执行过程中多次使用,还需要包括一个良好的分布,以便小矩形将很好地分散在大矩形的中心周围,而不是全部聚集在一个角上 通过谷歌搜索,我发现了几个关于矩形布局、最大空矩形、随机分布的算法。。。但是没有任何东西真正满足我的需求,也没有显示良好的代码实现 有人

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

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

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

通过谷歌搜索,我发现了几个关于矩形布局、最大空矩形、随机分布的算法。。。但是没有任何东西真正满足我的需求,也没有显示良好的代码实现


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

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

也许在你读这本书的时候可以拿一本

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

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

以下是一个更简单的问题版本:

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

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

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


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

根据你的需要,某些东西可能已经存在。例如,如果您正在开发web应用程序,请查看jQuery:

如果该代码满足您的需要,但您不是在开发web应用程序,那么您可以检查源代码以获得所需的内容


希望这能有所帮助。

小矩形的坐标是任意的还是82*n,176*m?它们必须是任意的。IDK当然可以,但我会使用您之前询问的,从最小距离处移除起始点,只要从任何地方开始,并将小矩形放在其中的任何地方,如果合适的话。无论如何,为了最小的重叠,你必须做最大的空矩形问题。问题是我甚至找不到一个好的实现来解决最大的空矩形问题。对于一个好的分布来说,这并不是那么容易做到的。你的要求是矛盾的:小矩形的放置不能是随机的,也不能是在重叠最小化和分散最大化的位置。