我实施了" ear-splitting"简单多边形的三角剖分方法。在测试中,我看到它在对称的5点星的测试用例上崩溃了。 我想我明白为什么这个多边形是"棘手" - 因为它包含共线的边缘......算法根据凸起的顶点(5个点中的一个)开始选择的一个剃须对角线,然后检查对角线是否为" X&#34 ;边缘交叉点,并且没有顶点侵入耳朵三角形)将盲目地指定与2个现有边缘共线的对角线。移除耳朵的外部顶点后,剩下的多边形将不再是简单的" - 它将具有直角(180度)的顶点,违反简单的多边形合约。
我感到懊恼,我已经证明,耳朵分裂面临着这种失败的情况。我从文献中想到它是一种通用的方法(适用于所有简单的多边形)。那些"归纳证据"你发现重复到处都是夸大其词?
有没有人成功修改过耳分裂三角测量法来处理5点星?
答案 0 :(得分:0)
共线边缘端点的随机扰动
“耳朵分裂”三角测量算法在具有共线边缘的多边形的情况下遭受破坏。正如你在5点星上看到的那样,所有边缘都有这个问题。
一个简单的“补丁”可以拯救“耳分裂”三角测量算法:
1)在开始三角测量之前,检查多边形的边缘列表(如LineSegs),以查找共享相同2D扩展线的任何一对边。对任何此类边缘的两个端点应用微小的随机扰动(例如,在-0.001 .. + 0.001范围内。)保存这些顶点的原始位置,以便在三角测量后恢复它们。
2)现在你可以进行耳分裂三角测量,消除了共线边缘的病态情况。
3)撤消应用于顶点的扰动。
我测试了这种方法,它运行正常。这可能看起来有点像黑客攻击,但它是迄今为止从最明显的缺陷中拯救耳分裂三角测量的最简单方法。与应用程序中的位置坐标相比,随机扰动要小一些,但与用于比较实数相等的有限数学EPSILON相比,它是巨大的。