5

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

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

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

最佳 (最佳)

贪婪的 (贪婪的)

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

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

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

4

2 回答 2

2

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

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

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

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

于 2014-03-29T18:41:13.203 回答
0

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

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

它可以在没有任何额外顶点的情况下做到这一点。

于 2012-12-16T14:03:52.737 回答