Unmedhed Point Cloud中的Point-in-Delaunay测试

时间:2012-04-04 18:00:50

标签: implicit delaunay

是否有可能,给定任意点P,并假设我可以查找按距离排序的附近(未网格化)点,有效地确定形成包含P的delaunay三角形的三个附近点?如果是这样,怎么样?

1 个答案:

答案 0 :(得分:1)

我假设您处于2D状态,没有共线点。我的建议也适用于3D。 构建一个包含所有点的Kd树。然后寻找P的2个最近邻居 构建外接圈。

考虑该圆圈的中心并寻找最近邻居。如果您找到的第一个点(忽略三角形点)超过圆半径,那么您将得到三角形。否则,违反了空圆属性,在这种情况下,您知道该点在三角形之外。您现在可以定义两个三角形并检查空圆属性是否像之前一样进行验证(但是如果您在圆圈中找到一个点,我认为您需要检查该点是否在三角形内)。然后就像做一个Delaunay三角测量,所有的四点和你在外接圆里面找到的所有其他点。

对于实现,您可以使用CGAL例如提供Orthogonal_incremental_nearest_neighbor,来自Triangle_2类和circumcenter函数的has_on_bounded_side函数。

你也可以直接使用用三个第一点初始化的Delaunay_triangulation_2类,并逐渐插入使三角形面的空圆属性无效的点。