我正在使用CGAL进行几何处理。在进行delaunay三角测量后,我需要检查2D网格内部或外部的点是否为
答案 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我发现了一个。