如何确定一个点是否在2d网格内(CGAL)?

时间:2014-03-17 06:18:17

标签: graphics geometry cgal

我正在使用CGAL进行几何处理。在进行delaunay三角测量后,我需要检查2D网格内部或外部的点是否为

enter image description here

3 个答案:

答案 0 :(得分:5)

如果您使用过CGAL的2D网格生成器,您可以:

  • 首先,在三角测量中将您的点p本地化:
    Tr::Face_handle fh = tr.locate(p);

  • 然后,检查相应的面fh是否在域中:
    bool is_inside = fh->is_in_domain();

答案 1 :(得分:1)

如果您不关心效率,只需针对所有三角形测试您的点(该点必须位于三个三角形边缘的内侧)。这需要O(n)。

如果您关心,请在平面细分中使用有效点位置技术。优选梯形分解。 http://en.wikipedia.org/wiki/Point_location#Trapezoidal_decomposition。在O(n.Log(n))预处理和O(n)存储(随机化)之后,您将实现O(Log(n))查询时间。

您还可以考虑跳转行走方法,该方法可以导致O(Sqrt(n))查询而无需预处理。 http://en.wikipedia.org/wiki/Jump-and-Walk_algorithm。检查http://www.cl.cam.ac.uk/techreports/UCAM-CL-TR-728.pdf

答案 2 :(得分:0)

您可以使用arrangements。该装置预处理任何2d平面细分(包括带孔的三网格)并且可以回答点位置查询。所以你可以问它哪个三方面包含了这个问题。如果它显示为空,你知道你的观点是在外面。

谷歌搜索给出了一些关于这个主题的文献链接。 Here我发现了一个。