想在木板上任意的挖洞,做到任意的异形。看到这个功能,刚开始感觉挺简单,分割成三角网格。后来做的时候才发现,对于切直角,扣圆洞这些都好做,但异形的形状任意变化,位置变化,三角网格是无法确定的,查找资料,发现这个对应的数学模型叫三角剖分,实现的算法也很多,于是看了很多论文,明白了原理。由原理到算法也挺麻烦,主要是项目进度不能拖,想三四天做出来。这么短的时间做出来,肯定不能自己写算法,找一些现成的算法,进行改造是最快的。
    刚开始找了个c++三角剖分,测试的过程中发现效果不理想,然后是js写的算法,测试过程中也不理想,最后找到了c#写的三角剖分算法,测试效果虽然也不理想,但是算法写的不错,一看就是bowyer-watson算法。
    上面找到的代码,缺点都是只是对没有洞的进行三角剖分,而我想要做的带洞的三角剖分。通过比较找到的代码,觉得在最后一个c#代码上修改,修改的思路是,自己写了一个闭合曲线判断算法,找到最外边的闭合曲线,逆时针顺序存储点集,内部闭合曲线顺时针顺序存储点集,然后在最后生成的三角网格,去掉内部闭合曲线的三角形。
     最终做到的效果:
        木板的任意异形、任意挖洞算法-LMLPHP
10-09 11:09