C++ 优化Delaunay三角剖分算法

C++ 优化Delaunay三角剖分算法,c++,algorithm,delaunay,C++,Algorithm,Delaunay,亲爱的社区成员: 我最近一直在研究cpp中的Delaunay三角剖分实现。虽然我有一个有效的算法。。速度非常慢(大约在16秒内计算出100个对象) 该算法基于蛮力方法。给定一组有限的点: 如果可以的话,我将对每个点进行三次迭代检查 从这些点创建一个三角形 从这三个点,我创建了一个圆,它穿过这些点 我第四次遍历整个点集,检查创建的圆是否包含与这三个点不同的点 如上所述 若圆内并没有其他点,我假设由这三个点创建的三角形是有效的 正如我提到的,该算法是此处描述的基于Delaunay三角剖分的直接实

亲爱的社区成员:

我最近一直在研究cpp中的Delaunay三角剖分实现。虽然我有一个有效的算法。。速度非常慢(大约在16秒内计算出100个对象)

该算法基于蛮力方法。给定一组有限的点:

  • 如果可以的话,我将对每个点进行三次迭代检查
    从这些点创建一个三角形
  • 从这三个点,我创建了一个圆,它穿过这些点
  • 我第四次遍历整个点集,检查创建的圆是否包含与这三个点不同的点 如上所述
  • 若圆内并没有其他点,我假设由这三个点创建的三角形是有效的
正如我提到的,该算法是此处描述的基于Delaunay三角剖分的直接实现:。它工作“完美”,但速度很慢


关于逻辑的任何想法/建议都可以加速它(如果可能,在不完全改变逻辑的情况下)?

谢谢大家的快速反馈

我做了一些额外的研究,遗憾的是,似乎降低时间复杂度的最佳方法是完全重写现有算法


对于可能有类似问题的其他人,这里介绍了示例方法:

如果您希望获得可接受的速度,则必须更改逻辑。无论你使用什么技巧,n^4都会非常慢,合理的算法是n logn。你能为一些三角形范围预定义一组圆吗。然后看看你的点是否与其中一个匹配。我将给出一个很少有人知道的一般提示:当检查点是否在圆中时,你不需要取平方根。这一页列出了四种算法。试一试怎么样?另外,瓶颈通常是在错误的列表中使用过多的重新分配或插入移动。。。导致更糟糕的复杂性…这应该是评论而不是回答。