如何分布最小重叠的矩形

How to distribute rectangles with minimum overlap

基本上我需要将各种矩形随机分布在一个更大的矩形中。所以:

  1. 虽然有足够的 space,但矩形不会重叠或重叠一点。
  2. 当没有足够的 space 矩形重叠时,仍会尝试尽可能少地重叠(因此它们都堆叠在一个地方)。

不需要经典的理想左上到右下包装。重点是我需要随机传播。

起初我试图通过随机选择一个矩形的位置然后比较与已经放置的所有矩形的碰撞来暴力破解它。显然不理想。

然后我尝试将 "points" 分配给 space 并在这些点附近放置矩形。矩形越接近一个点,它应用的 "pressure" 就越多。对于放置的每个矩形,这种压力都会叠加。算法试图以最小的压力将矩形放置在点附近。不幸的是,这导致矩形堆叠在左上角和右下角附近。

(如果你也关闭这个,我什至不知道你还需要什么信息)。

假设您不想要任何重叠,您可以使用称为扫描的方法来查找所有 新矩形中间的可能位置。可以把它分成长方形,然后计算每个长方形的面积,然后按各自的比例随机选择一个。如果这是好的解决方案,请询问更多详细信息。

如果它们可以重叠,比方说 10%,那么只需制作小于 10% 的矩形,分布它们,然后它们膨胀回来。

也许你可以把屏幕分割开来,把矩形随机分布在分割出来的区域上。如果重叠,去掉最后一步,在屏幕上随机找一个区域开始分发。

将屏幕分成n个部分,随机select一个部分存储起来。如果它再次出现,请忽略它并继续前进并继续用矩形填充它。您可以将此形状塑造成类似于矩形的形状,并为其编写另一个算法。就像拼图一样,你会从你收集的矩形中找到碎片,试图让每个图形都适合拼图的近似图形。因此,将问题转化为这种方式可能会有所帮助。你可以把这个问题变成一个随机的拼图问题。祝你好运。

  • 第一步:随机select和区域,
  • 第2步:分配矩形,
  • 第 3 步:如果重叠,删除最后一步,
  • 第四步:如果重叠,select随机新区域,

你可以循环这个过程。