Как я могу сгенерировать сетку для части поверхности с установленным уровнем, используя CGAL? - PullRequest
1 голос
/ 05 ноября 2019

Это вопрос об инструменте 3D Surface Mesh Generation в CGAL. ​​

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

Проблема

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

enter image description here

Я могу придумать, как решить эту проблему:

  • Выполните сетку всей «родительской» поверхности, а затем
  • Извлеките сетку, соответствующую требуемой «области».

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

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

1 Ответ

1 голос
/ 06 ноября 2019

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

Давайте дляНапример, у вас есть уравнение сферы:

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);
}
...