2012-06-06 89 views
4

是否有任何算法可以近似具有n个非重叠矩形的给定多边形,从而给出最大覆盖范围?我的意思是,最大覆盖范围是矩形区域的总和最大化。矩形不一定等于大小。如何用n个矩形近似一个多边形?

我正在处理的多边形是凸面的。如果确切的解决方案很难/昂贵(我期待它),但也欢迎简单的良好启发式方法。

编辑我一直以为约计与多边形内部的矩形多边形的,但与矩形的解决方案并不完全内部的多边形也很好。如果是这样的话,该区域的最大化就是该区域的最小化。

编辑2我忘了提及这些矩形是正交矩形,即与轴对齐。

+0

你能提供更多的信息吗?我想知道,你想获得什么信息(矩形数量,总面积总和,浪费空间的百分比)。此外,您还需要指定一些内容:您是否希望使用最少数量的矩形进行最大面积覆盖?因为有很多1mm^2的矩形,你可以近似该区域的相当好。如果是这样,这听起来像http://en.wikipedia.org/wiki/Multi-objective_optimization。也许你可以把你的问题投射到多背包问题上。 – Slomo

+0

@Slomo:我会给出多边形和矩形的数量作为输入。够了吗? – nimcap

+0

好的,谢谢。基于此,Jens Schauder的第一个想法似乎是合理的。由于您只有凸多边形,最大的矩形将位于中心。所以你可以递归地找到剩余的下一个较小区域的最大矩形。您的递归将在您打开第n个矩形(输入)时结束。 – Slomo

回答

2

第一个想法,也许其他人可以改善它。

  • 在多边形内放置一个正方形的地方,尽可能远离任何边缘。
  • 迭代 1)生长它, 2)移动它,并把它以最大化从边缘的距离。直到你不能再生长为止
  • 从头开始,同时考虑放置矩形的边缘作为多边形的边缘。
5

一种方法是为您的多边形创建(通常情况下为矩形)边界框。计算边界框的面积与多边形的面积之间的差值。如果差值足够小,就大功告成了,如果没有,继续......

鸿沟箱分成4个大小相等的长方形,2×2。找出哪些矩形完全位于多边形内部。计算多边形内和多边形内矩形的总面积之差。如果差值足够小,就大功告成了,如果再继续......每4个矩形进4子矩形......如果在任何阶段,你会发现一个长方形或者是内外完全或完全

鸿沟在多边形之外,您可以从矩形列表中将其删除,以便在下一次迭代中进行细分。

换句话说,使用一个quadtree划分包含您的多边形空间并发展到满足您的精度标准所必需的程度。

3
  1. 创建多边形的队列,Q,将被处理
  2. 初期多边形自Q

  3. 求P
  4. 的最长侧甲添加至Q

  5. 删除多边形P

  6. 旋转P以使A在X轴上
  7. 如果P是三角形,请在A的中心用垂直线分割它: enter image description here
  8. 两个半部G和H添加到Q和转到3
  9. (现在,P具有4个或更多个侧面)
  10. 如果X和/或Y是急性:

enter image description here

10。以P,A的下一个最长边,并转到5

11。从A向上投影出一个红色矩形。找到与P,B和C相交的2点: enter image description here

12。选择较长的(B)并最终确定绿色矩形

13。将其余数字(D,E和F)添加到Q

14。转到3