我有一种切割问题。有一个不规则的多边形没有任何孔和标准尺寸的矩形瓷砖及其值的列表。
我想要一种有效的算法来找到适合这个多边形的单个最佳值平铺;或者只是说单个图块是否适合多边形内部的算法。对于小于100个顶点的不规则多边形,它应该在确定的时间内运行。
请考虑您可以旋转多边形和瓷砖。 对凸面和非凸面多边形的答案/提示表示赞赏。
答案 0 :(得分:5)
免责声明:我从未阅读过任何关于此的文献,因此可能有更好的方法。这个解决方案正是我在阅读完你的问题后想到的。
矩形有两个重要的尺寸 - 它的高度和宽度
现在,如果我们从多边形和矩形开始:
1:绕过多边形的周边并记下矩形的高度适合多边形的所有位置(您可以将其存储为多边形*):
2:绕过刚刚制作的新多边形的周边,并记下矩形的宽度适合多边形的所有位置(同样,你可以将它存储为多边形):
3:矩形应该适合这个新的多边形(只是要小心你将矩形正确定位在多边形内部,因为这是一个多边形 - 而不是一个矩形。如果你将矩形的左上角节点与顶部对齐这个新多边形的左边节点,你应该没问题)
4:如果找不到矩形适合的区域,请将多边形旋转几度,然后重试。
*注意:在某些多边形中,您可以获得多个矩形可以安装的位置:
答案 1 :(得分:2)
经过多次无望搜索后,我认为没有针对此问题的具体算法。直到,我发现this old paper about polygon containment problem.如上所述,提出了一个非常好的算法,可以考虑具有 n 点的多边形是否适合 m 的多边形对于两个可移动和可旋转的2D多边形,该算法通常为O(n ^ 3 m ^ 3(n + m)log(n + m))。
如果你在计算几何中搜索这样一个不规则的算法,我希望它可以帮助你。
答案 2 :(得分:1)
这可能会有所帮助。它附带了Java编写的源代码
http://cgm.cs.mcgill.ca/~athens/cs507/Projects/2003/DanielSud/