假设我已经从N个点中构建了3D delaunay三角剖分。现在我有了一个查询点,我需要找到包围查询点的三角剖分的四面体。如何以最快的方式做到这一点?我知道一般的octtree和kdtree方法,但是我希望有一种利用四面体不是任意的而是3D delaunay的结果的快速方法。
我可以使用VTK或CGAL或其他C ++库,并且代码应为C ++。
答案 0 :(得分:1)
此example显示了如何将locate()
函数用于CGAL的3D三角剖分。如果您需要加快位置而不是加快施工速度,可以将Delaunay_triangulation_3
的参数LP
设置为CGAL::Fast_location
。
答案 1 :(得分:0)
提示:
在用于2D Delaunay的Green&Sibson方法中,他们通过从云的中心开始并沿三角剖分的边缘朝目标进行搜索,以寻找最近的邻居。对于均匀的点分布,每次搜索的费用为√N次操作。
我相信,该原理可以推广到四面体化,并且对应于成本√√N。不如log N好,但仍然很吸引人。如果查询点不是随机的而是保持本地化,则从上一个查询点开始可能会进一步减少查询时间。