可以通过两种方式解决这个问题:
i)通过将给定多边形划分为凸多边形,使得没有 凸多边形之间的重叠
ii)通过使用凸多边形覆盖给定的多边形,使得它们的结合 给出原始多边形。在这种情况下,可能存在重叠 凸多边形
虽然分区覆盖整个多边形,但是通过第二种方法可以减少凸多边形的数量。众所周知,用最小数量的凸多边形覆盖凹多边形(第二种方法)是NP-Hard。
我特别在寻找基于上述第二种方法的算法,但凸多边形的数量可能不是最小的。
答案 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)。