【问题标题】:an algorithm for fitting a rectangle inside a polygon一种在多边形内拟合矩形的算法
【发布时间】:2013-03-01 09:49:05
【问题描述】:

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

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

请考虑您可以旋转多边形和图块。 凸多边形和非凸多边形的答案/提示表示赞赏。

【问题讨论】:

  • 在 [矩形内多边形] 上的 Google 搜索返回了一些有趣的结果,包括这篇研究论文:mpi-inf.mpg.de/~jeschmid/public/Knauer2012.pdf,以及一些 SO 问题:stackoverflow.com/q/610462/56778stackoverflow.com/q/10214829/56778
  • 你提到你的多边形是不规则的。它们是凸的吗?
  • 当然我以前用谷歌搜索过。不过谢谢你的指导。我编辑了问题。
  • 这是一个简单的近似想法,我会尝试使用凸多边形。首先旋转它,直到它尽可能水平(寻找直径并使其水平)。给定一个图块,如有必要,也将其旋转以使其水平。然后把它放在多边形边界矩形的中心,看看哪些顶点在多边形内部。如果只有一两个相邻的顶点在外面,把瓷砖往明显的方向移动,看看能不能把它们都放进去。
  • 你能描述一下为什么@JimMischel 的链接不够用吗?

标签: algorithm polygon computational-geometry rectangles


【解决方案1】:

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

矩形有两个重要的度量值 - 高度和宽度

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

1:绕过多边形的周边,注意矩形高度适合多边形的所有位置(您可以将其存储为多边形*):

2:绕过您刚刚制作的新多边形的周边,并记下矩形宽度适合多边形的所有位置(再次,您可以将其存储为多边形):

3:矩形应该适合这个新多边形(请注意将矩形正确放置在多边形内,因为这是一个多边形 - 不是矩形。如果将矩形的左上角节点与顶部对齐这个新多边形的左节点,你应该没问题)

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

*注意:在某些多边形中,你会得到不止一个地方可以拟合矩形:

【讨论】:

  • 感谢您的回答;但这不是我想要的。我想要一个算法来解决矩形包含多边形问题
  • @aisa 我的算法会告诉你在每个给定的旋转中,一个矩形可以容纳多少个不同的位置。因此,如果位置数为零,则矩形将不适合该旋转。如果位置数 > 零,则矩形将适合该旋转。因此,通过一个简单的条件语句,您可以检查您需要什么。除非你真的想解决这个问题,因为你有非常严格的公差,你应该能够根据你的场景调整我的算法每次迭代的度数。
【解决方案2】:

经过多次无望的搜索,我认为这个问题没有任何特定的算法。直到,我发现this old paper about polygon containment problem.
提到的那篇文章,提出了一个非常好的算法来考虑具有 n 点的多边形是否可以适合具有 m 点的多边形.
对于两个可移动和可旋转的二维多边形,算法一般为 O(n^3 m^3(n+m)log(n+m))。

如果您正在寻找计算几何中的这种不规则算法,我希望它可以帮助您。

【讨论】:

    【解决方案3】:

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

    http://cgm.cs.mcgill.ca/~athens/cs507/Projects/2003/DanielSud/

    【讨论】:

    • 感谢您的帮助。但我提到多边形可以旋转。它不一定是凸的。无论如何,再次感谢您的链接。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-10-13
    • 1970-01-01
    • 1970-01-01
    • 2016-10-27
    • 1970-01-01
    • 2020-06-14
    相关资源
    最近更新 更多