1

这是一个关于CGAL 中的3D Surface Mesh Generation工具的问题。

根据文档,我需要提供要以隐式形式进行网格划分的曲面作为零水平集曲面。这似乎限制了输入表面的多样性。

问题

在我的用例中,我需要为一个更大的“父”流形隐式表面的一个小“区域”生成网格。“区域”本身是非流形的,因为它不包含一个卷。

在此处输入图像描述

我能想到的解决这个问题的方法是:

  • 网格化整个“父”表面,然后
  • 提取与所需“区域”对应的网格。

但是,出于性能原因,我想避免这种情况。

我应该如何处理这个?CGAL 中是否有任何其他模块可以帮助我实现这一目标?

4

1 回答 1

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);
}
于 2019-11-06T08:28:35.297 回答