带有障碍物的2D包装

时间:2010-03-26 10:17:24

标签: algorithm packing

有人知道在包含障碍物的正方形中移动矩形的有效算法吗?

矩形:

  • 可以旋转
  • 可以移动/传送
  • 不得与障碍物碰撞(黑色方块)

障碍:

  • 无法移动
  • 可以添加到任何地方

目标:添加障碍物后,尝试移动矩形,使其不会与任何障碍物发生碰撞。

State 1 http://img440.imageshack.us/img440/6995/59737192.png

State 2 http://img87.imageshack.us/img87/2336/28560269.png

State 3 http://img406.imageshack.us/img406/5469/30594959.png

State 4 http://img683.imageshack.us/img683/81/88927554.png

State 5 http://img25.imageshack.us/img25/3657/83405570.png

1 个答案:

答案 0 :(得分:1)

看看这个:Dynamic programming - Largest square block
基本上,给定矩形,您添加障碍物,并移除障碍物干扰的方格 然后,运行链接算法(“限制器”是障碍物和现有方块),如果找到的地方可以适合NxN大小的正方形(N是矩形的大部分),并添加矩形) 。
这可以进一步优化,我委托你这样做。 (基本上 - 矩形并不总是放在最佳位置。这可以补救,至少在某种程度上可以解决)
该解决方案将为您添加的每个障碍物提供O(n)时间和空间 您还应该考虑可能的修改:不要为每个障碍重建阵列,而是为void-of-barriers阵列构建它,并在进行时修改它。这将为每个障碍物节省整个阵列。