如何从凸片混淆形成凹面形状

时间:2011-07-14 07:41:58

标签: c++ math graphics sfml concave

嘿所以我在之前的回答中被告知要用多个凸形做出凹形,我会做以下几点:

  

如果您没有凸包,请执行包装算法   得到一个凸出的边框,包含你所有的点(再次相当   快速)。 en.wikipedia.org/wiki/Gift_wrapping_algorithm

     

选择边界上的一个点作为算法的起点。

     
     

现在,通过你形状上的以下几点来看,   但不在凸边上。   找到一个时,创建一个包含顶点的新形状   起始点指向找到的非边界点。   最后将起始点设置为找到的边界点

     

递归现在是你的朋友:对每个新进行完全相同的过程   你做的子形状。

     
但是我对一件事感到困惑。如果一行中的两个顶点是边界外的,你会怎么做?在到达第一个之后,您将起始点连接到它,但是在您再次开始再次操作之后立即进入另一个非边界点,只留下2个顶点可以使用:起点和新的非边界点。 我缺少什么?

为了说明我的问题,这里有一个与此问题相关的形状:如果有人可以全部绘制并使用此算法遍历算法的步骤,那将会很棒。并使用第1点作为起点。

enter image description here

谢谢!

1 个答案:

答案 0 :(得分:0)

假设您确实想要采用凸多边形(如图所示)并将其分解为凸部而不引入新顶点,通常的方法称为“耳剪切”,并在本维基百科文章中进行了描述,{{3 }}。在这种方法中,凸片是三角形,它们必须是凸的。

此问题已在Stackoverflow中使用CGAL计算几何软件Polygon triangulation进行了讨论。