【发布时间】:2018-07-12 14:11:10
【问题描述】:
我需要在 CGAL 中生成大量椭圆体网格。椭球的形状是相同的,它们的位置和方向不同。我正在寻找一种有效的方法,所以我认为我必须:
- 使用 CGAL::make_surface_mesh 仅生成一个球形网格,并对其应用缩放变换以使其成为椭圆体,
- 旋转并平移第一个椭圆体网格以创建其他网格。
我生成了以下球形网格:https://doc.cgal.org/latest/Surface_mesher/Surface_mesher_2mesh_an_implicit_function_8cpp-example.html。
使用:
typedef CGAL::Cartesian<double> K;
typedef K::Vector_3 Vector3;
typedef CGAL::Aff_transformation_3<K> Trans3;
我已经使用 CGAL::Aff_transformation_3 编写了缩放、平移和旋转几何对象的仿射变换。例如缩放变换为:
K::RT M[9]={2.0,0.0,0.0,0.0,1.0,0.0,0.0,0.0,1.0};
Trans3 sca(M[0], M[1],M[2],M[3],M[4],M[5],M[6],M[7],M[8]);
我找不到将这些变换应用于从隐式函数生成的球面网格的方法。
我是否必须使用不同于 3D Surface Mesh Generation 的另一个库来生成表面网格?
什么是用于此目的的好包?
我认为使用 CGAL::make_surface_mesh 生成每个网格不是很有效,对吗?
谢谢
【问题讨论】:
-
为什么不直接对椭球进行网格划分?
-
或者你可以对
operator()中的点应用逆变换 -
谢谢,我已经编辑了这个问题来解释为什么我认为我不应该直接对每个椭圆体进行网格划分。
-
@sloriot ,你能解释一下为什么我应该使用逆变换,我该怎么做?我读过 vertices_begin() 迭代器在 SurfaceMeshComplex_2InTriangulation_3 doc.cgal.org/latest/Surface_mesher/… 中是不可变的
-
@Enrico 有人回答了您的问题,请您接受答案或在评论中提供反馈吗?