gpt4 book ai didi

c++ - 如何访问 CGAL 3D 三角剖分中的方面?

转载 作者:行者123 更新时间:2023-11-28 01:31:34 31 4
gpt4 key购买 nike

我正在使用 CGAL计算一组点的 3D 三角剖分:

typedef CGAL::Exact_predicates_inexact_constructions_kernel K;
typedef CGAL::Delaunay_triangulation_3<K> CGALTriangulation;
typedef CGALTriangulation::Point Point;

// Construction from a list of points
std::list<Point> points;
points.push_front(Point(0, 0, 0));
points.push_front(Point(2, 0, 0));
points.push_front(Point(0, 2, 0));
points.push_front(Point(2, 2, 0));
points.push_front(Point(1, 1, 1));

// Perform triangulation
CGALTriangulation T(points.begin(), points.end());

访问三角形(面)

我需要在 Unity 中创建一个网格,所以我使用 CGAL,因为它有很多算法来处理这个复杂的问题。问题是,在 API 中很难找到一种方法来访问构成三角剖分的不同三角形(以及它们的顶点),而且我还没有找到一种方法:(

注意 请注意,仅访问顶点对我来说是不够的:

for (CGALTriangulation::Finite_vertices_iterator it = T.finite_vertices_begin(); 
it != T.finite_vertices_end();
it++)
{
CGALTriangulation::Triangulation_data_structure::Vertex v = *it;
// Do something with the vertex
}

因为我没有得到关于每个顶点属于哪个面(三角形)的任何信息。三角形正是我所需要的!

如何访问三角剖分的三角形(面)?如何从每个面中取出顶点?

最佳答案

我不确切知道你能实现什么。 3D Delaunay 三角剖分是将点的凸包分解为四面体。无论如何,如果您想访问三角剖分的各个方面,请使用 Finite_facets_iterator。

类似于:

for (CGALTriangulation::Finite_facets_iterator it = T.finite_facets_begin(); 
it != T.finite_facets_end();
it++)
{
std::pair<CGALTriangulation::Cell_handle, int> facet = *it;
CGALTriangulation::Vertex_handle v1 = facet.first->vertex( (facet.second+1)%4 );
CGALTriangulation::Vertex_handle v2 = facet.first->vertex( (facet.second+2)%4 );
CGALTriangulation::Vertex_handle v3 = facet.first->vertex( (facet.second+3)%4 );
}

如果您对表面网格感兴趣,您可能需要查看重建算法,例如 Poisson surface reconstructionAdvancing Front Reconstruction .

关于c++ - 如何访问 CGAL 3D 三角剖分中的方面?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51333698/

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