gpt4 book ai didi

c++ - CGAL - 在多面体中找到点

转载 作者:太空狗 更新时间:2023-10-29 23:00:04 28 4
gpt4 key购买 nike

我正在使用 CGAL 库编写一些代码来处理几何问题。

我有一个 Polyhedron object并使用它创建一个网格域,遵循 [文档][2] 中的代码。

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

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

所以我所做的是使用对象 Triangulation 中的方法 locate[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

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

Cone

但是如果我尝试像圆环这样的对象,它不起作用,我发现圆环上的孔在网格内部(圆环内的点结果为“真”),在 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

关于c++ - CGAL - 在多面体中找到点,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34804416/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com