随机放置矩形,没有重叠

时间:2012-03-08 04:59:30

标签: algorithm graphics computational-geometry

我正在寻找一种声音算法,可以将相同大小的给定数量的矩形随机放入一个更大的矩形(画布)中。

我认为有两种方法可以做到:

  1. 创建一个空数组,其中包含已放置在画布上的矩形。从空白画布开始。在循环中,随机选择一个位置以放置一个新的矩形。检查数组是否有一个与新矩形重叠的矩形。如果没有,将新矩形放入数组并重复循环。否则,选择一个新职位,然后重新运行检查。等等。我认为这可能永远不会终止(理论上)。我不喜欢它。

  2. 使用网格并随机将矩形放入单元格中。这可能看起来像网格放置。我也不喜欢它。

  3. 有更好的方法吗? “更好”意味着比网格方法更有效,或更直观“随机”。在任何方面都更好。

3 个答案:

答案 0 :(得分:0)

您可能会发现QuadtreesR-trees对您有用。

答案 1 :(得分:0)

这是一个简单的启发式方法。它将是非重叠和随机的。

随机放置一个矩形。然后,计算第一个矩形的两个平行边的延伸与画布边缘的交点。您将获得四个凸空区域。将这些空白区域中的其他矩形逐个放置,并计算放置的类似划分。并尝试将剩余的矩形放在空白区域。

您可以尝试不同的策略。您可以尝试将矩形放置在靠近角落的位置。或者,您可以将它们放置在区域的中心附近。我们不能讨论最优性,因为你引入了随机性。

答案 2 :(得分:0)

我使用以下方法创建内部类似房间的地下城。

1)散布N点随机,但不在彼此的几个像素内。 2)依次对于每个点,尽可能在所有四个方向上展开。停止 如果你碰到另一个矩形就会扩展 3)当没有房间可以扩展时停止算法。

结果是N个矩形,只有几个矩形的小空间。

代码位于二进制图像库中

https://github.com/MalcolmMcLean/binaryimagelibrary/blob/master/dungeongenerator3.c