是否有任何算法用于覆盖具有凸多边形的凹多边形(包含孔)

时间:2017-11-24 08:35:02

标签: algorithm computational-geometry polygons

可以通过两种方式解决这个问题:

i)通过将给定多边形划分为凸多边形,使得没有     凸多边形之间的重叠

ii)通过使用凸多边形覆盖给定的多边形,使得它们的结合     给出原始多边形。在这种情况下,可能存在重叠     凸多边形

虽然分区覆盖整个多边形,但是通过第二种方法可以减少凸多边形的数量。众所周知,用最小数量的凸多边形覆盖凹多边形(第二种方法)是NP-Hard。

我特别在寻找基于上述第二种方法的算法,但凸多边形的数量可能不是最小的。

1 个答案:

答案 0 :(得分:0)

正如MBo和Yves Daoust在您的问题评论中已经提到的那样。多边形分解成凸多边形可以通过三角测量(或梯形分解)来完成。这将导致具有n-2(内部)三角形的n个顶点简单多边形P,即,顶点数量是线性的。

构造凸分解的另一种方法是使用广义motorcycle graph。我认为必须有一个更简单的方法! 主要思想是为P中的每个反射顶点r开始摩托车。每辆摩托车在给定方向上以给定速度行驶并留下痕迹。如果另一辆摩托车遇到这样的痕迹,它会撞坏,即停止但留下痕迹。 广义是指在P中嵌入,并且多边形边界用作摩托车也会崩溃的墙壁。此外,如果两个摩托车在同一点相遇,我们必须开始另一个摩托车,或者在这种情况下,只需继续一个并停止另一个。在所有摩托车崩溃后,有一条痕迹的图形,实际上是P的凸曲面细分。有几篇论文(one here),但实施起来会很艰难。这导致O(r)凸多边形覆盖P的内部。

我认为最简单的方法是采用三角测量或梯形分解。这些都经过深入研究,可作为许多图书馆的实施。

评论中还提到:可以生成强制O(n)多边形的输入。想象一下具有n / 2个反射顶点的星形多边形(内角> pi)。