如何将三角形网格化为凸多边形?

时间:2013-01-15 06:04:06

标签: c# geometry computational-geometry

我有一个三角形网格。三角形有不同的“颜色”。像这样:

enter image description here

我需要得到的是优化网格,其中过多的三角形合并为凸多边形。像这样:

enter image description here

有人可以给我一些关于某些算法的链接吗?提前谢谢!

P.S。我正在使用C#。

2 个答案:

答案 0 :(得分:1)

Hertel-Mehlhorn算法是执行此操作的标准方法;它可以概括为

  1. 从多边形P的三角剖分开始;
  2. 删除不必要的对角线
  3. 重复。
  4. (来自http://www.philvaz.com/compgeom/

    这适用于多项式时间,并且具有最优性的界限,尽管它不一定是最优的。

    在您的情况下,您不会考虑不同颜色的三角形之间的对角线来修改步骤#2。

    一种通常会产生“更好看”效果的启发式方法是在每一步合并最长的对角线。

    希望有所帮助。

答案 1 :(得分:0)

我没有任何算法链接来解决这个问题,但我认为比一次建立一个三角形的凸多边形更好的方法可能是首先将三角形合并为最大的简单多边形(即:它们可以是凹的,但没有孔)你可以,然后将这些大的多边形分成它们的凸起成分。

由于内角大于180度,您知道这些分裂将出现在哪些顶点,然后您只需选择要分割的事件边缘。选择最佳边缘以进行分割的精确方法不是一个简单的问题,但合理的启发式方法可能是在分割后最大化<180度内角的数量。