Algorithm 多边形内矩形拟合的一种算法

Algorithm 多边形内矩形拟合的一种算法,algorithm,polygon,computational-geometry,rectangles,Algorithm,Polygon,Computational Geometry,Rectangles,我有一种切割问题。有一个不规则的多边形,没有任何孔,还有一个矩形瓷砖的标准尺寸列表及其值 我想要一个有效的算法来找到适合这个多边形的单个最佳值瓷砖;或者是一种算法,它只说明一块瓷砖是否可以放入多边形中。对于顶点少于100个的不规则多边形,它应该在确定的时间内运行 请考虑可以旋转多边形和瓦片。 欢迎提供凸多边形和非凸多边形的答案/提示。免责声明:我从未阅读过有关这方面的任何文献,因此可能有更好的方法。这个解决方案正是我读了你的问题后想到的 一个矩形有两个重要的尺寸——它的高度和宽度 现在,如果我们

我有一种切割问题。有一个不规则的多边形,没有任何孔,还有一个矩形瓷砖的标准尺寸列表及其值

我想要一个有效的算法来找到适合这个多边形的单个最佳值瓷砖;或者是一种算法,它只说明一块瓷砖是否可以放入多边形中。对于顶点少于100个的不规则多边形,它应该在确定的时间内运行

请考虑可以旋转多边形和瓦片。


欢迎提供凸多边形和非凸多边形的答案/提示。

免责声明:我从未阅读过有关这方面的任何文献,因此可能有更好的方法。这个解决方案正是我读了你的问题后想到的

一个矩形有两个重要的尺寸——它的高度和宽度

现在,如果我们从一个多边形和一个矩形开始:

1:沿着多边形的周长走一圈,注意矩形的高度适合多边形的所有位置(您可以将其存储为多边形*):

2:围绕刚刚创建的新多边形的周长,注意矩形的宽度将适合多边形的所有位置(同样,您可以将其存储为多边形):

3:矩形应适合此新多边形(只需注意将矩形正确定位在多边形内,因为这是一个多边形,而不是一个矩形。如果将矩形的左上角节点与此新多边形的左上角节点对齐,则应该可以)

4:如果找不到矩形适合的区域,请将多边形旋转几度,然后重试

*注意:在某些多边形中,您将获得多个可以拟合矩形的位置:


经过多次无望的搜索,我认为没有任何特定的算法来解决这个问题。直到我发现
这篇文章,提出了一个非常好的算法,如果一个具有强n>n/强>点的多边形可以拟合一个具有强>m < /强>点的多边形。
该算法是O=(n ^ 3 m ^ 3(n+m)log(n+m))的两个可移动和可旋转的2D多边形。
如果你正在计算几何中寻找这样一种不规则的算法,我希望它能帮助你。

这可能会有所帮助。它附带了Java编写的源代码


谷歌搜索[rectangle in polygon]会返回一些有趣的结果,包括这篇研究论文:,以及一些问题:,你提到你的多边形是不规则的。它们是凸面的吗?当然我以前用谷歌搜索过。但是谢谢你的指导。我编辑了这个问题,这里有一个简单的近似思想,我会尝试一个凸多边形。首先旋转它,直到它尽可能水平(寻找直径并使其水平)。给定一块瓷砖,如有必要,也可将其旋转,使其水平。然后将其放置在多边形边界矩形的中心,查看哪些顶点位于多边形内部。如果只有一个或两个相邻的顶点在外面,那么将瓷砖向明显的方向移动,看看是否可以将它们全部放在里面。你能描述一下@JimMischel的链接不够用的原因吗?谢谢你的回答;但这不是我想要的。我想要一个算法来解决矩形包含多边形的问题。@aisa我的算法将告诉您,在每个给定的旋转中,一个矩形在一个多边形中可以容纳多少个不同的位置。因此,如果位置数为零,则矩形将不适合该旋转。如果位置数>零,则矩形将适合该旋转。因此,通过一个简单的条件语句,您可以检查所需的内容。除非你真的想解决这个问题,因为你有非常严格的公差,否则你应该能够根据你的场景调整我的算法每次迭代的度数。谢谢你的帮助。但是我提到多边形可以旋转。它不一定是凸的。无论如何,再次感谢你的链接。