Методы задания неявных областей

Рассмотрим ограниченную область $ \Omega \subset \mathbb{R}^3$ с кусочно-гладкой границей.

Пусть задана некоторая функция $ u(x): \mathbb{R}^3 \to \mathbb{R}$ такая, что во внутренних точках области выполнено $ u(x)<0$ , а в дополнении области справедливо $ u(x)>0$ , как показано на рис. 1.

\includegraphics[scale=1.0, angle=0]{new_figs/var_implicit_domain.eps}
Fig. 1. Пример неявного задания двумерной области $ \Omega$ .

Предполагается, что функция $ u(x)$ непрерывна по липшицу, представима в виде разности выпуклых функций, является кусочно-гладкой, и ее производные вдоль некоторого невырожденного векторного поля, транверсального к $ \partial \Omega$ , существуют и не равны нулю в некотором конечном слое $ S$ около $ \partial \Omega$ .

  • приближенное построение функции расстояния со знаком
    • поверхностная триангуляция;
    • облако точек;
    • набор плоских сечений;
    • воксельная решетка;
    • модель САПР, заданная одновременно $ B$ -сплайнами и тесселяцией
  • использование неполных и противоречивых данных при помощи метода радиальных базисных функций;
  • булевы операции над областями.

Построение тетраэдральных сеток в неявных областях

  • область задается посредством "оракула" как точка пересечения нулевой изоповерхности с произвольным отрезком прямой. Шевчук, 2007 - алгоритм для построения тетраэдральных сеток в областях с гладкой границей, Boissonat J.-D., Cohen-Steiner D., Mourrain B., Rote G., Vegter G., 2007 - описание алгоритма из пакета CGAL
  • область задается посредством неявной функции со знаком (Перссон, Стренг, 2004)

Построение неявной функции с использованием булевых операций

Примеры примитивов

сфера:

$\displaystyle u(x)=(x^2_1 + x^2_2 + x^2_3)^{\frac12}-1,
$

куб:

$\displaystyle u(x)=\max(\vert x_{1}\vert-1,\vert x_{2}\vert-1,\vert x_{3}\vert-1),
$

конечный круговой цилиндр:

$\displaystyle u(x)=\max((x^2_1 + x^2_2)^\frac12-R, \vert x_{3}\vert-1)
$

Пусть $ u_1(x)$ и $ u_2(x)$ - неявные функции, задающие области $ \Omega_1$ и $ \Omega_2$ . Тогда, в зависимости от способа задания области $ \Omega_3$ , функция $ u_3(x)$ будет выглядеть следующим образом:

\begin{displaymath}\begin{array}{lcl}
 \Omega_3 = \Omega_1 \cup \Omega_2 & \Long...
..._2 & \Longrightarrow & u_3(x)=\max(u_1(x),-u_2(x))
 \end{array}\end{displaymath} (1)

Построение неявной функции с использованием РБФ Аппроксимант неявной функции по набору отрезков $ S_1, \dots, S_n$ ищется в следующем виде (Шевчук, 2004)


$\displaystyle u_\epsilon(x) = \frac{\sum_k l_k \theta_k(x)}{\sum_k l_k\Theta_k(x)},$ (2)


где $ l_k$ - длина ребра $ S_k$ , а $ \theta_{k}(x)$ и $ \Theta_{k}(x)$имеют вид

$\displaystyle \theta_k (x)=\int\limits^1_0 {\frac{(\phi(b_k)-\phi(a_k)) t +\phi...
...-q_k
)^T n_k }{(\vert(b_k-a_k) t + a_k -x\vert^2+\varepsilon
^2)^2}}   d t
$

$\displaystyle \Theta_k (x)=\int\limits^1_0 {\frac{1}{(\vert(b_k-a_k) t + a_k -x\vert^2 + \varepsilon ^2)^2}}   dt
$

где $ q$ - произвольная внутренняя точка отрезка $ S_k = [a_k, b_k]$ , а $ n_k$- единичная нормаль к ориентированному ребру, которая задает целевое значение градиента неявной функции. .

а) б)
\includegraphics[scale=0.36, angle=0, clip=true]{new_figs/wiresh.ps} \includegraphics[scale=0.36, angle=0, clip=true]{new_figs/wire1sh.ps}
в) г)
\includegraphics[scale=0.36, angle=0, clip=true]{new_figs/wire1sh02.ps} \includegraphics[scale=0.36, angle=0, clip=true]{new_figs/wire3sh02.ps}
Fig. 2. а) Точное задание контура. Построена интерполирующая функция. б) Контур с самопересечением. Точный интерполянт образует нежелательные петли. в) По контуру с самопересечением построен аппроксимант. г) Входные данные зашумлены. Аппроксимант сглаживает разрывы и самопересечения.