序
在完成代码后发现其存在严重的效率问题,在顶点大于5000的时候耗时要超过2秒钟,其主要的原因是因为没有使用剔除完成三角形的解决方案。后来,去翻原作者的代码,才明白他使用的三角形靠左优化方案。
解决方案
- 将顶点按照水平轴进行排序
- vertex.sort((a,b)=>a.x.compareto(b.x))
- 剔除条件
- 当一个三角形的外切圆在 新插入顶点的左边时,就可以完成剔除了
- triangle.circlecenter.x + r < newVertex.x
- 被剔除的三角形不能包含超级三角形的顶点
效果
他看起来像是这种样子,从左往右在编制三角形,左边已经编制完成的,相对于右边新插入的顶点,就是已经完成的三角形。
这种方法可以最快的速度下输出正确的结果,在没有使用任何线程的情况下,5000个顶点可以在0.6秒完成。