确定点是CGAL中3D Alpha形状表面的内部还是外部

时间:2014-07-15 16:37:10

标签: c++ cgal point-in-polygon concave-hull

我正在使用CGAL使用ex_alpha_shapes_3 example创建一组3D点的凹壳。接下来,我想知道空间中的点查询是否位于由三角形凹面(ex_alpha_shapes_3代码的输出)创建的曲面内。 A"多边形点"技术应该有用于此目的。如果有人能帮我解决这个问题,我将不胜感激。

2 个答案:

答案 0 :(得分:4)

你可以使用locate函数,根据单点的不同点以及单纯形函数classify的输出,你可以直接知道你是在里面,外面还是外面边界。

  • 无论是单面类型,EXTERIOR是外部,INTERIOR是内部。
  • 如果该点落在边缘上,则REGULAR位于边界上,而SINGULAR则取决于您的设置中是否存在孤立边缘
  • 如果点落在顶点上,则REGULAR位于边界上,而SINGULAR则取决于隔离输入点是否应位于您的设置中

答案 1 :(得分:1)

我不知道CGAL,但是你可以使用一些启发式算法,因为你知道你的多面体是凸的。您可以在2D中完成大量工作。您可以使用任何轴,但我们假设我们正在XY平面中工作并暂时忽略Z分量。由于您的形状是凸的,因此通常只有两个三角形,其XY坐标围绕您的点的XY坐标。对于任何三角形,您可以快速确定x [min]< x [point]< x [max]同样适用于y。如果这些测试失败,继续前进。如果它们成功,则需要进一步测试以确定该点是否实际位于三角形内。找到2个可接受的三角形后,找到该点(X,Y)处每个三角形的Z值。如果点的Z在面的Z值之间,则该点在实体内。