Subdivision

Методы последовательного уплотнения (расщепления) данных (subdivision).

Методы subdivision относятся к рекурсивным методам, получившим широкое распространение в последнее время.
Идею метода последовательного уплотнения (subdivision) можно определить следующим образом: subdivision определяет гладкую кривую или поверхность как предел последовательности получаемую последующим уточнением первоначальных данных. Методы последовательного уплотнения используются в тех случаях, когда описываемый объект имеет сложную структуру, не позволяющую получить аналитическое описание с достаточной точностью. Такого рода задачи возникают, например, в компьютерной графике, при моделировании сложных объектов. Следующий пример является характерным для такого рода методов.

На приведенном рисунке, в результате применения метода subdivision треугольная решетка на каждом шаге становится все более мелкая. Тем самым на каждом шаге описание объекта становится более гладким.
Каким же условиям должны удовлетворять новые точки, получаемые в результате пополнения данных? Метод получения новых точек должен отвечать следующим условиям В 1974 Дж. Чайкин (George Chaikin) в курсе лекций прочитанных в университете штата Юта (University of Utah) описал процедуру конструирования кривой как предела последовательности полигонов. Нас этот алгоритм интересует как основополагающий алгоритм subdivision (алгоритм последующего уточнения кривой). В дальнейшем этот подход в геометрическом моделировании был забыт, так как приобретет в описании кривых был у аналитических методов, использующих, например, базисные сплайны. Однако со временем появился большой интерес к рекурсивным методам описания как кривых, так и поверхностей. Методы, которые стали определять как методы subdivision, основываются на основополагающей парадигме Чайкина:
- искомая кривая получается в результате последовательного усовершенствования первоначального контрольного полигона.
Сейчас этот подход используется для построения разнообразных методов генерирования как кривых, так и поверхностей.
Исследователи, начиная с Bezier работали с кривыми генерируемыми контрольными полигонами, но при этом они фокусировали исследования для получения аналитического описания этой кривой, основываясь, прежде всего, на полиномах Бернштейна.
Для Чайкина контрольные полигоны были интересны сами по себе. Его интересовало геометрическое моделирование. Он предложил схему "усечения углов", в результате чего, генерируется новый контрольный полигон, получаемый усечением углов оригинального полигона.
Эта идея проиллюстрирована на следующем рисунке.
Понятно, что мы можем на каждом шаге относится к полигону как к исходному, применить ту же процедуру ко второму полигону и "обрезать" его углы, и повторять эту процедуру далее. В результате предельного перехода мы получим кривую. В этом состоит идея Чайкина. Конструкция Чайкина не использует никакие аналитические представления и предоставляет простой и элегантный механизм построения кривых.

Методы последовательного уплотнения (subdivision) кривых.

Если \(\textbf{B}_r(t)\) есть вектор \[ \textbf{B}_r(t)=\left(\ldots B_r(t-2), B_r(t-1), B_r(t), B_r(t+1), B_r(t+2),\ldots\right), \] то равенство (\ref{s.9}) запишется в виде \begin{equation}\label{s.10} \textbf{B}_r(t)=\textbf{B}_r(2t)\mathbb{S}, \end{equation} где \(\mathbb{S}\) матрица у которой лишь коэффициенты \begin{equation}\label{s.11} s_{2k+i,i}=\frac{1}{2^r}{ r+1 \choose i } \end{equation} отличны от нуля. Любую сплайновую кривую (\ref{s.5}) можно записать в виде \begin{eqnarray*} \textbf{S}_r(t) & = & \textbf{B}_r(t){\mathbb{P}}^0 \\ & = & \textbf{B}_r(2t){\mathbb{P}}^1 = \textbf{B}_r(2t)\mathbb{S}{\mathbb{P}}^0\\ & & \ldots\\ & = & \textbf{B}_r(2^{j+1}t){\mathbb{P}}^{j+1} = \textbf{B}_r(2^{j+1}t)\mathbb{S}{\mathbb{P}}^{j}= \textbf{B}_r(2^jt)\mathbb{S}^j{\mathbb{P}}^0, \end{eqnarray*} откуда сразу получаем соотношения \[ {\mathbb{P}}^{j+1} = \mathbb{S}{\mathbb{P}}^j, \] где \(\mathbb{S}\) матрица c коэффициентами (\ref{s.11}).
Полученное соотношение называется формулами subdivision.
В координатной форме формулы subdivision будут иметь вид \begin{equation}\label{s.12} P^{j+1}_k=\sum_{i}s_{k,i}P^j_i, \end{equation} или, что то же \begin{equation}\label{s.13} P^{j+1}_{2k+1}=\sum_{i}s_{2k+1,i}P^j_i \end{equation} и \begin{equation}\label{s.14} P^{j+1}_{2k}=\sum_{i}s_{2k,i}P^j_i. \end{equation}

Конкретные методы subdivision кривых

Для примера рассмотрим формулы subdivision подробнее.
Если \(Z/2=\left\{\ldots,-1,-\frac{1}{2},0,\frac{1}{2},1,\ldots\right\}\), то поставим в соответствие множеству \(\textbf{P}^j_i\) (\(i\in Z\)) множество \(\textbf{p}^j_i\) (\(i\in Z/2\)) согласно правилу \[ \textbf{P}^j_i=\textbf{p}^j_{2i}. \] Тогда \begin{equation}\label{s.15} \textbf{S}_r(t)=\sum_{i\in Z/2}\textbf{p}^1_iB_r(2(t-i)) \end{equation} и при этом, \begin{equation}\label{s.16} B_r(t)=\sum_{i\in Z/2}c_{r,i}B_r(2(t-i)), \end{equation} где \begin{equation}\label{s.17} c^r_{i}=\frac{1}{2^{r}} { r+1 \choose 2i }. \end{equation} Отсюда и из (\ref{s.5}) получаем \begin{equation}\label{s.18} \textbf{S}_r(t)=\sum_{i\in Z}\textbf{P}^0_i\sum_{j\in Z/2}c^r_{j-i}B_r(2(t-j))= \sum_{j\in Z/2}\sum_{i\in Z}c^r_{j-i}\textbf{P}^0_iB_r(2(t-j)). \end{equation} Используя (\ref{s.9}), имеем \begin{equation}\label{s.19} \textbf{p}^1_j=\sum_{i\in Z}c^r_{j-i}\textbf{P}^0_i. \end{equation} Для \(r=2\) получаем \[ \textbf{p}^1_0=\ldots+0\cdot \textbf{P}^0_{-2}+\frac{3}{4}\textbf{P}^0_{-1}+\frac{1}{4}\textbf{P}^0_{0}+0\cdot \textbf{P}^0_{1}+\ldots \] и, соответственно, \[ \textbf{p}^1_{\frac{1}{2}}=\ldots+0\cdot \textbf{P}^0_{-2}+\frac{1}{4}\textbf{P}^0_{-1}+\frac{3}{4}\textbf{P}^0_{0}+0\cdot \textbf{P}^0_{1}+\ldots. \] Заметим, что \(\textbf{p}^1_j\) есть выпуклая комбинация близких значений \(\textbf{P}^0_i\). Для \(r=2\) узлы нового полигона (полигона де Бора) есть концы отрезков делящих отрезки определяемые исходными точками в пропорции \(1:3\) и \(3:1\) \[ \textbf{P}^{j+1}_{2k}=\textbf{p}^{j+1}_{k}=\frac{1}{4}\left(3\textbf{P}^{j}_{k}+\textbf{P}^{j}_{k+1}\right), \] \[ \textbf{P}^{j+1}_{2k+1}=\textbf{p}^{j+1}_{k+1/2}=\frac{1}{4}\left(\textbf{P}^{j}_{k}+3\textbf{P}^{j}_{k+1}\right). \] Как видно, в результате получили алгоритм Чайкина.
Заметим, что если значения опорных точек снимаются с искомой кривой, то порядок аппроксимации кривой полученным методом subdivision совпадает с порядком приближения ломаной, то есть при \(n-\)й итерации с точностью \(O(n^{-2})\).
Для заданных значений кривой в точках \(i+0.5\) опорные точки можно уточнить так, что формулы для subdivision примут вид \[ \textbf{P}^{j+1}_{2k}=\frac{1}{32}\left(-3\textbf{P}^{j}_{k-1}+29\textbf{P}^{j}_{k}+7\textbf{P}^{j}_{k+1}- \textbf{P}^{j}_{k+2}\right), \] \[ \textbf{P}^{j+1}_{2k+1}=\frac{1}{32}\left(-\textbf{P}^{j}_{k-1}+7\textbf{P}^{j}_{k}+29\textbf{P}^{j}_{k+1}- 3\textbf{P}^{j}_{k+2}\right). \] Полученные формулы позволяют получить значения искомой кривой при \(n-\)й итерации с точностью \(O(n^{-3})\).
Для случая кубических сплайнов формулы subdivision примут вид \begin{equation}\label{s.20} \textbf{P}^{j+1}_{2k+1}=\textbf{p}^{j+1}_{k+1/2}=\frac{1}{8}\left(4\textbf{P}^{j}_{k}+4\textbf{P}^{j}_{k+1}\right), \end{equation} и \begin{equation}\label{s.21} \textbf{P}^{j+1}_{2k}=\textbf{p}^{j+1}_{k}=\frac{1}{8}\left(\textbf{P}^{j}_{k-1}+6\textbf{P}^{j}_{k}+\textbf{P}^{j}_{k+1}\right). \end{equation} Метод subdivision порожденный кубическими В-сплайнами называют методом Catmull-Clark. В этом случае процедура последовательного уточнения опирается на вычисление вершин и угловых точек полигона на каждой итерации.
Заметим, что как и в случае метода Doo-Sabin, так и для метода Catmull-Clark, если значения опорных точек снимаются с искомой кривой, то порядок аппроксимации кривой полученным методом subdivision совпадает с порядком приближения ломаной, то есть при \(n-\)й итерации с точностью \(O(n^{-2})\).
Как и в предыдущем случае, формулы subdivision полученные на основе кубических сплайнов можно уточнить. В этом случае формулы subdivision примут вид \[ \textbf{P}^{j+1}_{2k+1}=\frac{1}{12}\left(-\textbf{P}^{j}_{k-1}+7\textbf{P}^{j}_{k}+7\textbf{P}^{j}_{k+1} -\textbf{P}^{j}_{k+2}\right), \] и \[ \textbf{P}^{j+1}_{2k}=\frac{1}{48}\left(-\textbf{P}^{j}_{k-2}+2\textbf{P}^{j}_{k-1}+46\textbf{P}^{j}_{k} +2\textbf{P}^{j}_{k+1}-\textbf{P}^{j}_{k+2}\right). \] Полученные формулы позволяют получить значения искомой кривой при \(n-\)й итерации с точностью \(O(n^{-4})\).

Subdivision поверхностей.

Subdivision поверхностей использует похожесть на локальных местах с полиномиальным представлением и предполагает описание поверхности с помощью последовательности полиномиальных поверхностей. Как правило поверхность называют subdivision поверхностью, если она основывается на бинарном представлении однородных (uniform) B-сплайновых кривых (поверхностей). В общем случае определим полиномиальный метод, соответствующую subdivision оператору (оператору улучшения), который генерирует новое множество с большим числом полиномиальных элементов, что позволяет надеяться на достаточно полное описание исходной поверхности. Поверхность \(S_{r,s}(\mathbf{u})\) описываемая тензорным произведением В-сплайнов по прямоугольной решетке имеет вид \begin{equation}\label{s.22} \textbf{S}_{r,s}(\mathbf{u})=\sum_{\mathbf{i}\in Z^2}\textbf{P}_{\mathbf{i}} N_{r,s}(\mathbf{u}-\mathbf{i}), \end{equation} где \(\mathbf{u}=(u,v)\in R^2\) и \(N_{r,s}(\mathbf{u}-\mathbf{i})\equiv B_r(u-i)B_s(v-j)\) нормализованное тензорное произведение В-сплайнов порядка \(rs\) по решетке с узлами \(\mathbf{i}=(i,j)\).

Реализация метода subdivision поверхности образованной тензорным произведением В-сплайнов аналогична subdivision В- сплайновой кривой.
Положим \(\mathbf{j}\in Z^2/2\), если \(\mathbf{j}=\left\{\left(\left.\frac{i}{2},\frac{j}{2}\right)\right|(i,j)\in Z^2\right\}\), тогда для тензорного произведения В-сплайнов будет иметь место равенство \begin{equation}\label{s.23} N_{r,s}(\mathbf{u}-\mathbf{i})=\sum_{\mathbf{j}\in Z^2/2}c^{r,s}_{\mathbf{j}-\mathbf{i}}N_{r,s}(2(\mathbf{u}-\mathbf{j})). \end{equation} Отсюда и из (\ref{s.22}) сразу получаем \begin{equation}\label{s.24} \textbf{S}_{r,s}(\mathbf{u})=\sum_{\mathbf{i}\in Z^2}\textbf{P}_{\mathbf{i}}\sum_{\mathbf{j}\in Z^2/2}c^{r,s}_{\mathbf{j}-\mathbf{i}}N_{r,s}(2(\mathbf{u}-\mathbf{j})), \end{equation} откуда сразу получаем \[ \textbf{p}^1_{\mathbf{j}}=\sum_{\mathbf{i}\in Z^2}c^{r,s}_{\mathbf{j}-\mathbf{i}}\textbf{P}_{\mathbf{i}}, \mathbf{j}\in Z^2/2. \] Значения \(\textbf{p}^1_{\mathbf{j}}\) формируют решетку де Бора. К тому же \[ c^{r,s}_{\mathbf{j}}\equiv c^r_ic^s_j, \] или, что тоже \begin{equation}\label{s.25} c^{r,s}_{\mathbf{j}}=2^{-r+s}C_{r+1}^{2i}C_{s+1}^{2j}. \end{equation} В случае \(r=s=2\) отсюда получаем \[ \textbf{p}^1_{0,0}=\ldots+\frac{9}{16}\textbf{P}_{-1,-1}+\frac{3}{16}\textbf{P}_{0,-1}+\ldots +\frac{3}{16}\textbf{P}_{-1,0}+\frac{1}{16}\textbf{P}_{0,0}+\ldots \] Поверхности, полученные в результате последовательного применения таких масок, называют поверхностями Doo-Sabin.
Daniel Doo и Malcolm Sabin развили идею последовательного улучшения предложенную George Chaikin и адаптировали эту технологию для B-сплайновых поверхностей, что позволило получить новую конструкцию поверхности.
Как правило, для построения поверхностей Doo-Sabin в качестве опорных точек \({\bf P} _{i,j}\) используются значения, снятые с поверхности. При этом качество описания поверхности методом Doo-Sabin совпадает с качеством описания полигональной функцией, то есть поверхностью, совпадающей на каждом шаге с некоторой плоскостью.


Схема Doo-Sabin.

Если для построения метода subdivision использовать сплайны, то метод Doo-Sabin можно существенно уточнить. Для элемента \({\bf P}' _{0,0}\) маска subdivision будет иметь вид \[ S=(s_{\nu,\mu})_{\nu,mu=-1}^2= \frac{1}{1024} \left[ \begin {array}{rrrr} -3&-19&-9&-1\\ -27&213&47&-9\\ -57&791&213&-19\\ -9&-57&-27 &-3 \end {array} \right] \] то есть \[ {\bf P}' _{0,0}=\frac{1}{1024}(-27\,{\bf P}_{{1,-1}}+213\,{\bf P}_{{1,0}}+47\,{\bf P}_{{1,1}} -9\,{\bf P}_{{1,2}}-9\,{\bf P}_{{-1,-1}}-3\,{\bf P}_{{2,-1}}\] \[-19\,{\bf P}_{{2,0}}-9\,{\bf P}_{{2,1}}-{\bf P}_{{2,2}}-3\,{\bf P}_{{-1,2}}-57 \,{\bf P}_{{0,-1}}+ 791\,{\bf P}_{{0,0}}+213\,{\bf P}_{{0,1}}\] \[-19\,{\bf P}_{{0,2}}-57\,{\bf P}_{{-1,0} }-27\,{\bf P}_{{-1,1}} ), \] \[ {\bf P}' _{1,0}=\frac{1}{1024}(-9\,{\bf P}_{{2,-1}}-57\,{\bf P}_{{2,0}}-27\,{\bf P}_{{2,1}} -3\,{\bf P}_{{2,2}}-57\,{\bf P}_{{1,-1}}+791\,{\bf P}_{{1,0}}\] \[+213\,{\bf P}_{{1,1}}-19\,{\bf P}_{{1,2}}-27\,{\bf P}_{{0,-1}}+213\,{\bf P}_{{0 ,0}} +47\,{\bf P}_{{0,1}}-9\,{\bf P}_{{0,2}}-3\,{\bf P}_{{-1,-1}}\] \[-19\,{\bf P}_{{-1,0}}-9\,{\bf P}_{{- 1,1}}-{\bf P}_{{-1,2}} ), \] \[ {\bf P}' _{0,1}=\frac{1}{1024}(-{\bf P}_{{2,-1}}-9\,{\bf P}_{{2,0}}-19\,{\bf P}_{{2,1}}-3\,{\bf P}_{{2,2}}- 9\,{\bf P}_{{1,-1}}+47\, {\bf P}_{{1,0}}+213\,{\bf P}_{{1,1}}\] \[-27\,{\bf P}_{{1,2}}-19\,{\bf P}_{{0,-1}}+213\,{\bf P}_{{0,0}}+ 791\,{\bf P}_{{0,1}}-57\,{\bf P}_{{0,2}} -3\,{\bf P}_{{-1,-1}}-27\,{\bf P}_{{-1,0}}\] \[-57\,{\bf P}_{{-1,1}}-9\,{\bf P}_{{-1,2}} ), \] \[ {\bf P}' _{1,1}=\frac{1}{1024}(-3\,{\bf P}_{{2,-1}}-27\,{\bf P}_{{2,0}}-57\,{\bf P}_{{2,1}}-9\,{\bf P}_{{2,2}} -19\,{\bf P}_{{1,-1}}+213\,{\bf P}_{{1,0}}\] \[+791\,{\bf P}_{{1,1}}-57\,{\bf P}_{{1,2}}-9\,{\bf P}_{{0,-1}}+47\,{\bf P}_{{0,0 }}+213\,{\bf P}_{{0,1}} -27\,{\bf P}_{{0,2}}-{\bf P}_{{-1,-1}}\] \[-9\,{\bf P}_{{-1,0}}-19\,{\bf P}_{{-1,1}}-3\,{\bf P}_{{-1,2}} ). \]

Поверхности Catmull-Clark.

Используя subdivision для бикубических B-сплайновых поверхностей (для \(r=s=3\) ), Ed Catmull и Jim Clark получили следующие маски

В дальнейшем они развили методологию Doo и Sabin отметив, что она годится не только для прямоугольных решеток, но и для разбиений с произвольной топологией. Это обобщение было реализовано введением новой узловой точки, модификацией метода для вычисления точек вершин и методики присоединения точки в решетку.
Опишем этот алгоритм.
Для каждого набора узловых точек генерируются новые точки - которые представляют собой среднее всех оригинальных точек определяющих данную грань.
Граничные точки (точки лежащие на ребре) генерируются как средние значения оригинальных концов ребра и двух новых точек смежных к этому ребру.
Вычисление новых вершин определяется как среднее от \( {\bf Q} \), \( 2 {\bf R}\) и \(\frac{(n-3) {\bf S} }{n}\), где \( {\bf Q} \) есть среднее от новых узловых точек смежных с оригинальной узловой точкой, \( {\bf R} \) есть среднее от средин всех ребер соединеных с оригинальной вершиной и \( {\bf S} \) есть оригинальная вершина.
Присоединение к сетке происходит следующим образом.
Каждая новая узловая точка соединяется с новыми краевыми точками, ограничивающими новое ребро.
Каждая новая вершина соединяется с новыми краевыми точками порожденными оригинальной вершиной.


Схема Catmull-Clark.

На следующей иллюстрации продемонстрированы четыре шага применения схемы Catmull-Clark.

При этом грани соответствующие оригинальным контрольным точкам сохраняют валентность (количество ребер смежных вершине).
Заметим, что грани, соответствующие оригинальным точкам сохраняют валентность. Обратите внимание на точку с валентностью 8 на вершине тела.

Любая часть поверхности, где к нас массив \(4 \times 4\) контрольных точек с прямоугольной топологией, представляет собой бикубическую В-сплайн поверхность. В течение процесса subdivision единственно, где это условие не выполняется - в особых точках, где валентность не кратна четырем. Если в оригинале все грани имели валентность четыре, то в результате получим бикубическую В-сплайн поверхность.

Методы subdivision по треугольной решетке.

Тензорное произведение В-сплайнов можно определять не обязательно по прямоугольной решетке. Другой широко используемой модификацией В-сплайнов на случай двух переменных является поверхность вида \begin{equation}\label{s.26} \textbf{S}_{r,s,t}(\mathbf{u})=\sum_{\mathbf{i}\in Z^2}\textbf{P}_{\mathbf{i}} N_{r,s,t}(\mathbf{u}-\mathbf{i}), \end{equation} где \(\mathbf{u}\in R^2\) и \(\mathbf{i}\in Z^2\) узлы треугольной решетки определяемой векторами \(u\), \(v\), \(w\).
Сплайн по треугольной решетке строится как выпуклая оболочка В-сплайнов порядка \(r\), \(s\) и \(t\) с центром в точке \(\mathbf{i}\) построенных вдоль направлений \(u\), \(v\), \(w\).

Процедура subdivision сплайнами по треугольной решетке совершенно аналогична той же процедуре по прямоугольной решетке. Решетка с узлами \(\mathbf{i}\) определяет решетку с узлами в точках \(\mathbf{j}=\mathbf{i}/2\).
Тогда поверхность (\ref{s.26}) можно записать в виде \begin{equation}\label{s.27} \textbf{S}_{r,s,t}(\mathbf{u})=\sum_{\mathbf{j}\in Z^2}\textbf{P}_{\mathbf{j}} N_{r,s,t}(2(\mathbf{u}-\mathbf{j})). \end{equation} Замечая, что для базисного сплайна имеет место равенство \begin{equation}\label{s.28} N_{r,s,t}(\mathbf{u})=\sum_{\mathbf{j}\in Z^2}{c}^{r,s,t}_{\mathbf{j}} N_{r,s,t}(2(\mathbf{u}-\mathbf{j})), \end{equation} имеем \begin{equation}\label{s.29} \textbf{p}^1_{\mathbf{j}}=\sum_{\mathbf{i}\in Z^2}{c}^{r,s,t}_{\mathbf{j}-\mathbf{i}}\textbf{P}_{\mathbf{i}}. \end{equation} и \begin{equation}\label{s.30} c_{\mathbf{j}}=2^{-(r+s+t)}\sum_{k=0}^{t}C_r^{2i-k}C_s^{2j-k}C_t^{k}. \end{equation} Отсюда, для каждого конкретного случая, сразу получаем формулы subdivision. В частности, для сплайны \(N_{2,2,2}(\mathbf{u})\) порождают следующие маски

Последовательное применение таких масок образует поверхность Loop.
Основываясь на треугольной решетке и развивая идею subdivision, С. Loop предложил схему генерации двух вершин и углов.
Маска генерирования вершины позволяет сгенерировать контрольные точки для каждой вершины и граничные маски генерируют новые контрольные точки для каждого ребра треугольной решетки.
Краевые маски позволяют найти граничные точки как среднее трех величин: два центра смежных граней и средину ребра. Маска для вершины определяется как выпуклая комбинация точек \( {\bf V} \), оригинальной вершины и \( {\bf Q} \) среднего значения оригинальных точек на границе \( {\bf V} \). Эта выпуклая комбинация должна быть таковой, что: если \({\bf V} ^1\) есть новая точка вершины, то \begin{eqnarray*} {\bf V} ^1 & = & \frac{10 {\bf V} + {\bf Q} _1 + {\bf Q} _2 + {\bf Q} _3 + {\bf Q} _4 + {\bf Q} _5 + {\bf Q} _6}{16} \\ & = & \frac{5}{8} {\bf V} + \frac{ {\bf Q} _1 + {\bf Q} _2 + {\bf Q} _3 + {\bf Q} _4 + {\bf Q} _5 + {\bf Q} _6}{16} \\ & = & \frac{5}{8} {\bf V} + \frac{6 {\bf Q} }{16} \\ & = & \frac{5}{8} {\bf V} + \frac{3}{8} {\bf Q} \end{eqnarray*} Для произвольной треугольной решетки мы можем использовать те же правила генерирования новых краевых точек и новой вершины. Тем не менее Loop отмечал, что относительно определения вершины, поверхность дает некоторые точки в которых касательная поверхность изменяется дискретно. В дальнейшем он заметил, что если использовать subdivision определяемый следующим образом \[ {\bf V} ^1 \: = \: \alpha_n {\bf V} + ( 1 - \alpha_n ) {\bf Q} \] где \[ \alpha_n \: = \: \left( \frac{3}{8} + \frac{1}{4} \cos\frac{2\pi}{n} \right) ^ 2 + \frac{3}{8} \] то получим поверхность с непрерывно изменяющейся касательной плоскостью. (Отметим, что когда \(n=\frac{1}{2}\), то \( \alpha_n=\frac{5}{8}\), как требовалось).
Такие поверхности называют поверхностями Loop и для их генерирования используют маски

где для вершины с \( n\) углами параметр \( \beta\) используется для определения новой вершины. Это \[ \alpha_n {\bf V} + ( 1 - \alpha_n ) {\bf Q} \: = \: \frac{\beta {\bf V} + n {\bf Q} }{\beta+n} \] или \[ \alpha_n \: = \: \frac{\beta}{\beta+n} \] или \[ \beta \: = \: \frac{n \alpha_n}{1 - \alpha_n}. \]


Схема Loop.

Для треугольных решеток Dyn, N., Levin, D., и Gregory, J. A. в 1990 году предложили другую схему, известную как схема "бабочка" (Butterfly)

Вычисление формул subdivision из условия точности.

Заметим, что формулы subdivision можно получить из других соображений, например, из условия точности.
Проиллюстрируем этот факт для равномерных решеток.
Пусть \(f_{i,j}=f(ih,jh)\), где \(h\) шаг решетки. Имея значения \(f_{i,j}\), \(f_{i+1,j}\), \(f_{i,j+1}\), \(f_{i+1,j+1}\), найдем приближенное значение функции в точке \(((i+1/4)h,(j+1/4)h)\). Используя параллельный перенос, совместим точку \)((i+1/4)h,(j+1/4)h)\) с началом координат. Используя формулу Тейлора в окрестности нуля, получаем, что если \(f\in C^3(\mathbb{R}^2)\), то искомые данные можно записать в виде \[ f\left(-\frac{1}{4}h,-\frac{1}{4}h\right)=f-\frac{h}{4}\left(f'_x+f'_y\right)+\frac{h^2}{32}\left(f''_{xx}+2f''_{xy}+f''_{yy}\right)+O(h^3), \] \[ f\left(-\frac{1}{4}h,\frac{3}{4}h\right)=f+\frac{h}{4}\left(-f'_x+3f'_y\right)+\frac{h^2}{32}\left(f''_{xx}-6f''_{xy}+9f''_{yy}\right)+O(h^3), \] \[ f\left(\frac{3}{4}h,\frac{3}{4}h\right)=f+\frac{3h}{4}\left(f'_x+f'_y\right)+\frac{9h^2}{32}\left(f''_{xx}+2f''_{xy}+f''_{yy}\right)+O(h^3), \] \[ f\left(\frac{3}{4}h,-\frac{1}{4}h\right)=f+\frac{h}{4}\left(3f'_x-f'_y\right)+\frac{h^2}{32}\left(9f''_{xx}-6f''_{xy}+f''_{yy}\right)+O(h^3), \] где \(f=f(0,0)\) и \[ \left.f^{(n+m)}_{x^ny^m}=\frac{\partial^{n+m}f}{\partial x^{n}\partial y^{m}}\right|_{(0,0)}. \] Будем искать приближенное значение \(f=f(0,0)\) в виде линейной комбинации \[ f\approx\alpha f\left(-\frac{1}{4}h,-\frac{1}{4}h\right)+\beta f\left(-\frac{1}{4}h,\frac{3}{4}h\right)+\gamma f\left(\frac{3}{4}h,\frac{3}{4}h\right)+\delta f\left(\frac{3}{4}h,-\frac{1}{4}h\right)= \] \[ =f(\alpha+\beta+ \gamma+\delta)+\frac{h}{4}f'_x\left(-\alpha-\beta+3\gamma+3\delta \right)+ \frac{h}{4}f'_y\left(-\alpha+3\beta+3\gamma-\delta \right)+\] \[ \frac{h^2}{32}f''_{xx}\left(\alpha+\beta+ 9\gamma+9\delta\right)+ \frac{h^2}{16}f''_{xy}\left(\alpha-3\beta+ 9\gamma-3\delta\right)+ \] \[\frac{h^2}{32}f''_{yy}\left(\alpha+9\beta+ 9\gamma+\delta\right)+O(h^3).\] Если не давать предпочтения какому-либо направлению, то исходя из наиболее высокой точности формулы subdivision, получаем систему уравнений \[ \left\{ \begin{array}{c} \alpha+\beta+ \gamma+\delta=1, \\ \alpha+\beta-3\gamma-3\delta=0, \\ \alpha-3\beta-3\gamma+\delta=0, \\ \alpha-3\beta+9\gamma-3\delta=0. \end{array} \right. \] Отсюда сразу получаем \[ \alpha=\frac {9}{16},\beta=\frac{3}{16},\gamma=\frac{1}{16},\delta=\frac{3}{16}.\] Таким образом мы получили формулы subdivision Doo-Sabin. При этом заметим, что если \(f\in C^3(\mathbb{R}^2)\), то ошибка subdivision в точке \((0,0)\) будет равна \[ \frac{3h^2}{32}\left(f''_{xx}+f''_{yy}\right)+O(h^3). \] Аналогично получаются формулы subdivision для схемы Catmull-Clark, а также Loop и "Butterfly".
Заметим, что если \(f\in C^3(\mathbb{R}^2)\), то для схемы Catmull-Clark ошибка subdivision для точки на грани будет равна \[ \frac{h^2}{8}\left(f''_{xx}+f''_{yy}\right)+O(h^3), \] а для точки на ребре \[ \frac{h^2}{2}\left(f''_{xx}+f''_{yy}\right)+O(h^3). \] Для схемы Loop ошибка subdivision равна \[ \frac{3h^2}{8}\left(f''_{xx}+f''_{yy}\right)+O(h^3). \] Аналогично, но технически сложнее получается схема "Butterfly". Если \(f\in C^4(\mathbb{R}^2)\), то ошибка в этом случае имеет порядок \(O(h^4)\).
Идея алгебраической точности метода subdivision привела к появлению другого подхода к уплотнению данных. Это идея интерполяционного subdivision.

В следующем скрипте продемонстрированы возможности subdivision по отрисовке различных поверхностей.

Интерполяционный subdivision.

Полезная литература. Книги.

  1. Andersson L. Introduction to the mathematics of subdivision surfaces / L.Andersson, N.F.Stewart .— Philadelphia: SIAM, 2010 .— 356 p.
  2. Dyn N. Subdivision Schemes in Geometric Modelling / Nira Dyn, David Levin .— Tel-Aviv: Acta Numerica, 2002 .— 66 p.
  3. Farin G. Handbook of computer aided geometric design / G.Farin, J.Hoschek, M.-S.Kim .— Amsterdam: Elsevier, 2002 .— 820 p.
  4. Mourrain B. Subdivision methods for solving polynomial equations / B.Mourrain, J.Pavone .— France: Unité de recherche INRIA Sophia Antipolis, 2005 .— 22 p.
  5. Peters J. Subdivision Surfaces / J.Peters, U.Reif .— Berlin Heidelberg: Springer, 2008 .— 212 p.
  6. Sabin M. Analysis and Design Schemes of Univariate Subdivision / M.Sabin .— Berlin: Springer, 2010 .— 228 p.
  7. Subdivision Surface Modeling: Autodesk, 2011 .— 68 p.
  8. Warren J. Subdivision Methods for Geometric Design / Joe Warren, Henrik Weimer // Morgan Kaufmann Publishers, 2002 .— 316 p.
  9. Warren J. Subdivision Methods for Geometric Design / Joe Warren // Department of Computer Science Rice University, 1995 .— 111 p.
  10. Zorin D. Interpolation Subdivision for Meshes of Arbitrary Topology / D.Zorin, P.Schroder, W.Sweldens .— Caltech: Computer Graphics Group, 1996 .— 22 p.
  11. Столниц Э. Вейвлеты в компьютерной графике / Э.Столниц, Т.ДеРоуз, Д.Салезин .— Ижевск: НИЦ "Регулярная и хаотическая динамика", 2002 .— 272 с.

Полезная литература. Статьи.

  1. De Marchi S. An interpolant defined by subdivision and the analysis of thr error/S.De Marchi, A.Ligun, S.Timchenko, A.Shumeiko// Journal of Comp. and Appl. Mathematics.— 2001.— 145.— p. 71- 88.
  2. Daubechies I. Regularty of irregular subdivision / I.Daubechies, I.Guskov, W.Sweldens // Constructive Approximation: Springer, 1999 .— P.1-44.
  3. Donoho D.L. Smooth Wavelet Decompositions with Blocky Coefficient Kernels. In Recent Advances in Wavelet Analysis, L.Shumaker and F.Ward, eds. Academic Press, 1993
  4. Dubuc S. Interpolation through an Iterative Scheme / S.Dubuc // Journal of mathematical analysis and applications .— 1986 .— №114 .— P.185-204.
  5. Dyn N. A Butterfly Subdivision Scheme for Surface Interpolation with Tension Control / N.Dyn, D.Levin, J.Gregory // ACM Transactions on Graphics .— 2009 .— №2(9) .— P.160-169.
  6. Ligun A.A. Linear method of recovery of function of two variables on a binary lamination /A.Ligun, A.Shumeiko // East Journal of Approximation .— 2001 .— v.7, N 3 .— P.1-18.
  7. Micchelli C. Interpolatory Subdivision Schemes and Wavelets / C.Micchelli // Journal of approximation theory .— 1996 .— №86 .— P.41-71.
  8. Odehnal B. Subdivision Algorithms for Ruled Surfaces / Boris Odehnal // Journal for Geometry and Graphics. − 2008. − 1 (12) . − P.1−18.
  9. Volume Enclosed by Subdivision Surfaces
  10. Гусятин В.М. Неравномерное разбиение триангулированных поверхностей в задачах синтеза изображений методом обратного трассирования. / В.М.Гусятин, Р.В.Сорокин // Комп'ютерні системи та інформаційні технології .— 2009 .— №3(37) .— C.68-72.
  11. Лигун А.А. Восстановление функции по информации о ее значениях в узлах треугольной сетки, основанное на пополнении данных / А.А.Лигун, А.А.Шумейко // Украинский математический журнал.— 2002 .— №3 (54) .— С.332-341.
  12. Лигун А.А. Линейный метод восстановления функций, основанный на бинарном пополнении данных / А.А.Лигун, А.А.Шумейко // Украинский математический журнал .— 2001 .— №11(52) .— C.1501-1512.
  13. Лигун А.А. Линейный метод уточненного восстановления функций основанный на бинарном пополнении данных / А.А.Лигун, А.А.Шумейко // Вiсник Днiпропетровського унiверситету, Математика . − 2002. − 5. − С.95−103.
  14. Лигун А.А. Об одном способе восстановления функций по средним значениям на равномерной сетке / А.А.Лигун, А.А.Шумейко // Математичне моделювання. − Дніпродзержинськ: ДГТУ, 2001. − 1 (6). − С.16−17.
  15. Приставка П.О.Поповнення послідовностей відліків функцій двох змінних на основі поліноміальних сплайнів / П.О.Приставка // Вісник НАУ. − 2007. − 3-4. − С.36−39.
  16. Приставка П.О. Процедури небінарного subdivision на основі лінійних комбінацій В-сплайнів, близьких до інтерполяційних у середньому / П.О.Приставка // Актуальні проблеми автоматизації та інформаційних технологій. − 2012. − 16 . − С.142−152.
  17. Чашников Н.В. Cходимость схемы subdivision / Н.В.Чашников // Н.В. Семинар по дискретному гармоническому анализу и геометрическому моделированию «DHA & CAGD». − 2011. − С.1−9.
  18. Чашников Н.В. Cходимость схемы subdivision в случае двух переменных/ Н.В.Чашников // Н.В. Семинар по дискретному гармоническому анализу и геометрическому моделированию «DHA & CAGD». − 2012. − С.1−10.