【问题标题】:How can I generate mesh for a portion of level-set surface using CGAL?如何使用 CGAL 为水平集表面的一部分生成网格?
【发布时间】:2019-11-05 13:59:43
【问题描述】:
这是一个关于 CGAL 中的3D Surface Mesh Generation 工具的问题。
根据文档,我需要提供要以隐式形式进行网格划分的表面作为零水平集表面。这似乎限制了输入表面的多样性。
问题
在我的用例中,我需要为一个更大的“父”流形隐式曲面的一个小“区域”生成网格。 “区域”本身是非流形的,因为它不包含一个卷。
我能想到的解决方法是:
- 网格化整个“父”表面,然后
- 提取与所需“区域”对应的网格。
但是,出于性能原因,我想避免这种情况。
我应该如何处理这个?
CGAL 中是否有任何其他模块可以帮助我实现这一目标?
【问题讨论】:
标签:
mesh
cgal
triangulation
implicit-surface
【解决方案1】:
由于您的表面是隐式的,您可以轻松地创建表示该隐式表面与隐式体积(如球体、边界框或半空间)的交集的函数。
例如,假设你有一个球体方程:
auto sphere(double x, double, y, double z) {
return x*x + y*y + z*z - 1;
}
然后你可以用半空间计算交集,像这样:
auto half_space(double x, double y, double z) {
return y - x > 0 ? -1. : -1.;
}
auto intersection(double, x, double y, double z) {
if(half_space(x, y, z) > 0) return 1.
else return sphere(x, y, z);
}