球面空间约束delaunay三角剖分

时间:2015-01-17 06:39:09

标签: c++ computational-geometry delaunay

为了在球体上实现高性能动态寻路算法(在C ++中),我有兴趣在球体表面上执行增量约束delaunay三角剖分。现有的库似乎不够 - 我到目前为止能找到的最接近的是CGAL,它具有正确的拓扑空间但是度量空间错误。

图书馆应该有:

  • 合理的表现(我有大约100k点投入)
  • 球形拓扑和公制空间(老实说,这大大超过了#1)
  • 增量点插入和删除(供以后的算法使用)

目前,我唯一真正的选择似乎是近似的(通过在2D欧几里德度量空间上使用投影并在Delaunay保证中提供权衡)或者编写我自己的选项,带来所有麻烦。在球形度量空间中是否存在约束delaunay三角剖分的库?

1 个答案:

答案 0 :(得分:1)

由于现在标记为偏离主题(由于垃圾邮件?),我不妨给出至少一个全面的答案。

据我所知,截至2017年7月,有两种选择来计算球体上点的约束delaunay三角剖分。

第一个是libdts2(1)。它基于CGAL 2D delaunay三角剖分算法,并使用精确在球体上的有理点。不在球体上的点将捕捉到恰好在球体上的紧密有理点(2)。 它的缺点是使用4个辅助点,这些辅助点始终是三角测量的一部分。也不可能插入非常靠近北极的任何点。交叉约束的计算要么非常慢,要么只是近似的。

另一种选择是在(3)中实现所提出的算法。在这种方法中,点不必完全在球体上。遗憾的是,还没有代码可用,但有计划将其集成到CGAL(4)中。

因此,最好的办法是使用libdts2,直到GeometryFactory / INRIA发布他们的代码。这不应该造成很大问题,因为libdts2的接口在大多数方面类似于CGAL三角测量算法的接口。

如果感兴趣的是libdts2,您可以期待以下内容:

  • 使用约170 MiB Ram(单线程,Core i7-4700MQ)计算Saarland的OpenStreetMap数据集(309K节点,324K段)中所有街道的CDT大约需要16秒;
  • 在球体上评估谓词
  • 如果将无限面计为三角剖分的面
  • ,则它具有球形拓扑
  • 插入/删除是可能的,因为它基于CGAL 2D三角测量算法

参考文献:

  1. libdts2可在GitHub上找到
  2. " Rational Points on the Unit Sphere: Approximation Complexity and Practical Constructions"
  3. " Robust and Efficient Delaunay triangulations of points on or close to a sphere"
  4. CGAL Google Summer of Code Project Ideas