CGAL - 查找多面体内的点



我正在使用CGAL库处理一些代码来做几何的东西。

有一个多面体对象,使用它我按照 [文档][2] 中的代码创建了一个网格域。

使用方法CGAL::make_mesh_3(),我创建了我的网格,它是这个[类型][3]的对象

接下来,我需要一个普通的 3D 数组来表示网格所在的空间。我需要在数组 (i,j,k) 中逐点浏览,并确定具有这些坐标的点(在 i,j,k 转换为正确的单位之后)是否在多面体定义的域内。

所以我要做的是使用对象Triangulationlocate [4] 的方法,找到点在哪里。此方法返回一个Cell_Handle [5] 和一个Locate_type(从中可以知道点的位置)

三角测量类还有其他方法,如is_cell()is_infinite()...

关键是,如果我设置查询以了解该点是否在多面体内部,如下所示:

if( tr.is_cell(ch)  && !tr.is_infinite(ch) ) {
    return true;
  }else {
    return false;
  }

ch是查询locate返回的Cell_handle

只要多面体不是一个复杂的对象,它就可以工作。对于简单的对象(例如圆锥体、球体等),我得到一个漂亮的输出,如下所示:

球果

但是如果我尝试像圆环这样的对象,它不起作用,我得到圆环上的孔在网格内部(结果圆环内的点给出"true"),在我粘贴的 if 语句中。但他们不应该是。 我尝试了其他语句来过滤它,例如:

if ( lt == Tr::INSIDE_CONVEX_HULL && !tr.is_infinite(ch)) {
    return true;
  }

但结果是一样的。如果物体有孔或多面体不等于CONVEX_HULL,我就不明白我是什么。稍微想一想,在最好的情况下,CONVEX_HULL是我得到的。

那么如何确定点 (x,y,z) 是位于多面体内部还是网格内部呢?

有没有办法得到这个?

如果已将点定位在网格内,则具有包含该点的单元格控点。您可以使用 C3T3 is_in_complex(Cell_handle) 的成员函数来了解此单元格是在域内部还是外部。

请注意,如果要直接在多面体上工作,可以使用函子Side_of_triangle_mesh

相关内容

  • 没有找到相关文章

最新更新