【问题标题】:Reverse Rectangle Packing反向矩形包装
【发布时间】:2012-12-15 11:43:24
【问题描述】:

我有一个由正方形组成的连接形状,例如拿一张方形纸,沿着现有的线画一条线,这条线在它的开始处结束,并且不与自身交叉。

现在的目标是找到一种算法(不是蛮力),用尽可能少的非重叠矩形填充这个形状。

我正在寻找最佳解决方案。从图片中可以看出,朴素的贪心方法(取最大的矩形)不起作用。

(最佳)

(贪婪)

我的场景是减少顶点,但我确信还有其他用例。

注意:这个问题看起来很基本,但我无法在其他地方找到解决方案。另外,这个问题是 NP 难的吗?

编辑:我刚刚意识到,在我的场景中,用尽可能少的非重叠 三角形 填充形状会产生更好的结果。 p>

【问题讨论】:

  • 不知道这是否是最佳的,但直觉上我认为你可以扫描水平维度并计算水平方向构建的矩形,然后对垂直维度执行相同操作,并取两者中的最小值。
  • 重绘一个部分被遮挡的窗口听起来类似的问题,也许你可以在旧的窗口管理器中找到一个最佳算法,它只使用矩形裁剪,而不是任意蒙版,如 st-80
  • 搜索“装箱算法”。
  • 无关:我不明白。你能进一步详细说明吗? aka.nice:有趣的想法。你有什么窗口管理器可以让我看看吗? TonyHartley:似乎是一个不同的问题。
  • 装箱(装箱)使用边缘启发式来找到最佳拟合,我怀疑您问题的最佳解决方案在于边缘模式分析。我会尝试使用边缘分析和分辨率划分的分治法(即从 8x8、4x4、2x2 开始)。

标签: algorithm rectangles vertices packing


【解决方案1】:

自从我问了第一个问题以来,我已经花了很多时间研究这个问题。对于第一个问题(用矩形优化填充形状),我在标题“Optimal Greedy Meshing”下写了解决方案:

http://blackflux.wordpress.com/2014/03/01/meshing-in-voxel-engines-part-2/

这种复杂性实际上比对没有孔的多边形进行最佳三角剖分更好(更快)。最慢的部分是 Hopcroft-Karp 算法。

在链接的博客文章中还讨论了将形状视为多边形。请注意,我也在考虑漏洞。

【讨论】:

    【解决方案2】:

    第一个问题比三角形更难;对于三角形,请参阅

    中的算法

    http://en.wikipedia.org/wiki/Polygon_triangulation

    不需要任何额外的顶点就可以做到。

    【讨论】:

      猜你喜欢
      • 2020-04-16
      • 2011-11-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-11-27
      • 1970-01-01
      • 2020-11-19
      • 2010-09-14
      相关资源
      最近更新 更多