Как я могу сгенерировать сетку для части поверхности с установленным уровнем с помощью CGAL?

Это вопрос об инструменте создания трехмерной поверхностной сетки в CGAL.

Согласно документации, мне нужно предоставить поверхность для создания сетки в неявной форме как поверхность с нулевым уровнем. Похоже, это накладывает ограничение на многообразие входной поверхности.

Эта проблема

В моем случае использования мне нужно сгенерировать сетку для небольшой "области" неявной поверхности "родительского" коллектора большего размера. Сама "область" не является многообразной, потому что она не охватывает объем.

Я могу придумать способ решения этой проблемы:

  • Создайте сетку для всей "родительской" поверхности, а затем
  • Извлеките сетку, соответствующую требуемой "области".

Однако я хочу избежать этого по соображениям производительности.

Как мне поступить с этим? Доступен ли какой-либо другой модуль в CGAL, который может помочь мне в этом?

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);
}
Другие вопросы по тегам