将矩形划分为较小矩形的算法?

时间:2010-07-08 02:26:42

标签: c algorithm

将矩形(c struct与4 int s)划分为随机数的较小矩形(返回struct s列表)的算法是什么?如果较小矩形的最大和最小尺寸可以通过参数控制,那就更好了。

e.g。

+----------+            +-------+--+
|          |            |       |  |
|          |            |       |  |
|          |    -->     |---+---+--| (good)
|          |            |   |      |
|          |            +---+      |
|          |            |   |      |
+----------+            +---+------+

较小的形状应为4面,以下情况不好:

+----------+            +-------+--+
|          |            |       |  |
|          |            |       |  |
|          |    -->     |---+---+--| (not good)
|          |            |          |
|          |            +---+      |
|          |            |   |      |
+----------+            +---+------+

谢谢!

附录:( Moron讨论的矩形)

  +----+--------+
  |    |        |
  |    +---+----+
  |    |   |    | (rectangle-chase)
  +----+---+    |
  |        |    |
  +--------+----+

3 个答案:

答案 0 :(得分:9)

将矩形拆分为两个。递归。

答案 1 :(得分:4)

在没有说明矩形分割的条件下,问这个问题有点奇怪。

然而,我怀疑你所寻找的是一棵kd树。 kd-tree是一个二叉树,其中节点根据条件与两个结果子节点分开。 http://en.wikipedia.org/wiki/Kd-tree

还有一个四叉树,可以稍微简单一些。它涉及将节点分成4个大小相等的子节点。每个孩子都以这种方式递归分割,直到某些停止状态。 http://en.wikipedia.org/wiki/Quadtree

[编辑:更新以响应操作编辑。] 对于你正在做的事情,开始将矩形划分为偶数网格并决定合并哪些元素可能更简单吗?基本上是自下而上的方法:只需选择一个并开始随机合并相邻的单元格。不要对已遍历的单元格执行此操作,并且合并的结构应具有宽度和高度,以便扩展2x1单元格网格将扩展为2x2或3x1,以确保您始终保持4边矩形形状合并节点。

如果你想要一个更高级的方法,你可以像kd树那样接近它并自上而下构建它,但你需要合并整个子树,因为你根据随机条件和min /分裂最大宽度/高度参数。

答案 2 :(得分:2)

在一条边上选择一个随机点p,然后用一条线将矩形划分到相对边。然后,您可以在两半上递归,随机或在指定的限制下停止递归。