行进三角形算法是否保证(成功)终止?
该算法粗略地说:
- 遍历所有边界边
- 投影一个新点,从边缘和点添加一个新三角形,如果它是可接受的(新点不与任何现有三角形的外接球相交)
- 如果不可接受,请尝试将边缘与下一个或上一个点连接(关闭边界的非凸部分),如果它们是可接受的
- 如果仍然不可接受,请尝试将相交三角形中的一个点与边缘连接起来
- 否则跳过此迭代中的边缘
该算法通过投影新点正确地生成了带有三角形的网格。现在有一个三角形裂缝,不是局部的德劳内。
- 以恒定距离投影一个点显然失败了
- 使用下一个、上一个或交点不会生成一个可接受的三角形
- 忽略边缘会导致非闭合网格
- 为下一次迭代添加边会导致非终止算法,因为它也不能在下一次迭代中处理,并且没有其他处理的边会关闭孔
该示例是论文中使用的简单隐式圆函数,种子三角形是隐式函数上的任意边,与通过固定距离投影的点连接,然后按照算法中的定义投影回表面上。
当我给出下一个/上一个点的偏好时(如果它更接近,请选择下一个/上一个点,即使可以创建一个新三角形),我可以减少紧密裂缝的数量,但它也不能涵盖所有问题情况。
尽管我的实现存在明显的问题,但我看不出论文中描述的算法是否保证在迭代中总是找到一个可接受的三角形,直到边缘列表为空。