反向矩形填料

时间:2012-12-15 11:43:25

标签: algorithm rectangles vertices packing

我有一个连接的形状,由放在一起的正方形组成,例如:拿一张方形纸,沿着现有的线条画一条线,这条线在它的开头结束,不会自行穿过。

现在的目标是找到一个算法( not brute-force ),用尽可能少的非重叠矩形填充这个形状。

我正在寻找最佳解决方案。从图像中可以看出,天真贪婪的方法(采取最大的矩形)不起作用。

Optimal (最佳)

Greedy (贪婪)

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

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

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

2 个答案:

答案 0 :(得分:2)

我花了很多时间研究这个,因为我问了最初的问题。对于第一个问题(最好用矩形填充形状),我已在标题"最佳贪婪网格划线"

下编写了解决方案。

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

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

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

答案 1 :(得分:0)

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

中的算法

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

可以在没有任何额外顶点的情况下完成。