Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/129.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ CGAL中的椭球网格生成_C++_Mesh_Cgal - Fatal编程技术网

C++ CGAL中的椭球网格生成

C++ CGAL中的椭球网格生成,c++,mesh,cgal,C++,Mesh,Cgal,我需要在CGAL中生成大量的椭球网格。椭球体的形状是相同的,它们的位置和方向不同。我正在寻找一种有效的方法,因此我认为我必须: 使用CGAL::make_surface_mesh仅生成一个球形网格,并对其应用缩放变换以使其成为椭球体 旋转并平移第一个椭球体网格以创建其他网格 我已生成以下球形网格: 使用: typedef CGAL::Cartesian<double> K; typedef K::Vector_3 Vector3; typedef CGAL::Aff_transf

我需要在CGAL中生成大量的椭球网格。椭球体的形状是相同的,它们的位置和方向不同。我正在寻找一种有效的方法,因此我认为我必须:

  • 使用CGAL::make_surface_mesh仅生成一个球形网格,并对其应用缩放变换以使其成为椭球体
  • 旋转并平移第一个椭球体网格以创建其他网格
我已生成以下球形网格:

使用:

typedef CGAL::Cartesian<double> K;
typedef K::Vector_3 Vector3;
typedef CGAL::Aff_transformation_3<K> Trans3;
我找不到将这些变换应用于隐式函数生成的球面网格的方法

是否必须使用不同于3D曲面网格生成的其他库生成曲面网格

对于这一目的,什么是好的包装

我认为使用CGAL::make_surface_mesh生成每个网格不是很有效,对吗

谢谢

直接将其网格化:

double a=4,b=2,c=1; // the radii 

FT ellipsoid_function (Point_3 p) {
  const FT x2=(p.x()*p.x())/(a*a), y2=(p.y()*p.y())/(b*b), z2=(p.z()*p.z())/(c*c);
  return x2+y2+z2-1;
}

为什么不直接对椭球体进行网格划分?或者你可以在
操作符()中将反变换应用到点上。
谢谢,我编辑了这个问题来解释为什么我不应该直接对每个椭球体进行网格划分。@Slorio,你能解释一下为什么我应该使用反变换,以及如何使用它吗?我已经了解到顶点迭代器在SurfaceMeshComplex_2; Intriangulation_3@Enrico中是不可变的。有人回答了你的问题,你能接受答案或在评论中给出反馈吗?谢谢你的回答,但我需要生成大量相同的椭球,因此,旋转和平移同一网格更有效。我已经编辑了这个问题。您首先必须使用导出到多面体,我仍然建议您在进行仿射变换之前,首先对轴对齐的椭球进行网格划分,因为这样您的三角形会更好。CGAL::output_surface_facets_to_Polyhedron被标记为已弃用,我将其用作
CGAL::输出曲面面到多面体(c2t3,P)编译器给了我:错误:“output_surface_facets_to_polyhedron”不是“CGAL”的成员。您没有包含标题(并且没有记录要包含的标题)#include我还上传了一个完整版本的程序,它使用了不推荐的函数替换,并且它使用了Surface_mesh而不是Polyhedron_3。
double a=4,b=2,c=1; // the radii 

FT ellipsoid_function (Point_3 p) {
  const FT x2=(p.x()*p.x())/(a*a), y2=(p.y()*p.y())/(b*b), z2=(p.z()*p.z())/(c*c);
  return x2+y2+z2-1;
}