Daniel Doo и Malcolm Sabin развили идею последовательного улучшения предложенную George
Chaikin и адаптировали эту технологию для B-сплайновых поверхностей, что позволило получить новую конструкцию поверхности.
Считаем, что биквадратные однородные В-сплайн поверхности \({\bf P} (u,v)\) определены \(3 \times 3\) массивом контрольных
точек
\[
P \: = \: \left[
\begin{array}{ccc}
{\bf P} _{0,0} & {\bf P} _{0,1} & {\bf P} _{0,2} \\
{\bf P} _{1,0} & {\bf P} _{1,1} & {\bf P} _{1,2} \\
{\bf P} _{2,0} & {\bf P} _{2,1} & {\bf P} _{2,2}
\end{array}
\right]
\]
и следующее уравнение (в матричной форме)
\[
{\bf P} (u,v) \: = \: \left[
\begin{array}{ccc}
1 & u & u^2
\end{array}
\right] M P M^T \left[
\begin{array}{c}
1 \\v \\v^2
\end{array}
\right]
\]
где \( M\) есть \(3 \times 3\) матрица
\[
M \: = \: \frac{1}{2} \left[
\begin{array}{rrr}
1 & 1 & 0 \\
-2 & 2 & 0 \\
1 & -2 & 1
\end{array}
\right]
\]
Каждую фиксированную заплатку мы разобьем на четыре заплатки, которые дадут 16 новых контрольных точек. Обсудим
subdivision схему только для одной из четырех (этой подзаплатке соответствует \(0 \leq u,v \leq \frac{1}{2}\), остальные
легко определить аналогичным образом.
Разбивая поверхность, вводим новый параметр
\(u'=\frac{u}{2}\) и \(v'=\frac{v}{2}\)
и определяем новую поверхность \({\bf P}'(u,v)\). После замены получаем
\[
{\bf P} '(u,v) = {\bf P} \left( \frac{u}{2}, \frac{v}{2} \right) \]
\[ =\left[
\begin{array}{ccc}
1 &
\frac{u}{2} &
\left(\frac{u}{2}\right)^2
\end{array}
\right]
M P M^T
\left[
\begin{array}{c}
1 \\
\frac{v}{2} \\
\left(\frac{v}{2}\right)^2
\end{array}
\right] \]
\[ = \left[
\begin{array}{ccc}
1 & u & u^2
\end{array}
\right]
\left[
\begin{array}{ccc}
1 & 0 & 0 \\
0 & \frac{1}{2} & 0 \\
0 & 0 & \frac{1}{4}
\end{array}
\right]
M P M^T
\left[
\begin{array}{ccc}
1 & 0 & 0 \\
0 & \frac{1}{2} & 0 \\
0 & 0 & \frac{1}{4}
\end{array}
\right] ^T
\left[
\begin{array}{c}
1 \\v \\v^2
\end{array}
\right] \]
\[ = \left[
\begin{array}{ccc}
1 & u & u^2
\end{array}
\right]
M M^{-1}
\left[
\begin{array}{ccc}
1 & 0 & 0 \\
0 & \frac{1}{2} & 0 \\
0 & 0 & \frac{1}{4}
\end{array}
\right]
M P M^T
\left[
\begin{array}{ccc}
1 & 0 & 0 \\
0 & \frac{1}{2} & 0 \\
0 & 0 & \frac{1}{4}
\end{array}
\right] ^T
(M^{-1})^T M^T
\left[
\begin{array}{c}
1 \\v \\v^2
\end{array}
\right] \]
\[ = \left[
\begin{array}{ccc}
1 & u & u^2
\end{array}
\right]
M \left( M^{-1}
\left[
\begin{array}{ccc}
1 & 0 & 0 \\
0 & \frac{1}{2} & 0 \\
0 & 0 & \frac{1}{4}
\end{array}
\right]
M \right) P \left( M^T
\left[
\begin{array}{ccc}
1 & 0 & 0 \\
0 & \frac{1}{2} & 0 \\
0 & 0 & \frac{1}{4}
\end{array}
\right] ^T
(M^{-1})^T \right) M^T
\left[
\begin{array}{c}
1 \\v \\v^2
\end{array}
\right] \]
\[ = \left[
\begin{array}{ccc}
1 & u & u^2
\end{array}
\right]
M
\left( M^{-1}
\left[
\begin{array}{ccc}
1 & 0 & 0 \\
0 & \frac{1}{2} & 0 \\
0 & 0 & \frac{1}{4}
\end{array}
\right]
M \right)
P
\left( M^{-1}
\left[
\begin{array}{ccc}
1 & 0 & 0 \\
0 & \frac{1}{2} & 0 \\
0 & 0 & \frac{1}{4}
\end{array}
\right]
M \right) ^T
M^T
\left[
\begin{array}{c}
1 \\v \\v^2
\end{array}
\right] \]
\[ = \left[
\begin{array}{ccc}
1 & u & u^2
\end{array}
\right]
M P' M^T
\left[
\begin{array}{c}
1 \\v \\v^2
\end{array}
\right]
\]
где \(P' = S P S^T\) и
\[
S \: = \: M^{-1}
\left[
\begin{array}{ccc}
1 & 0 & 0 \\
0 & \frac{1}{2} & 0 \\
0 & 0 & \frac{1}{4}
\end{array}
\right]
M
\]
Таким образом получаем поверхность
\[
{\bf P} '(u,v) \: = \: \left[
\begin{array}{ccc}
1 & u & u^2
\end{array}
\right] M S M^T \left[
\begin{array}{c}
1 \\v \\v^2
\end{array}
\right]
\]
для любых \(3 \times 3\) массива контрольных точек
\( S\). Таким образом
\({\bf P} '(u,v)\)
есть однородная биквадратная B-сплайновая поверхность. Матрица
\( S\)
называется матрицей дробления
\begin{eqnarray*}
S & = &
\frac{1}{2}
\left[
\begin{array}{rrr}
2 & -1 & 0 \\
2 & 1 & 0 \\
2 & 3 & 4
\end{array}
\right]
\left[
\begin{array}{rrr}
1 & 0 & 0 \\
0 & \frac{1}{2} & 0 \\
0 & 0 & \frac{1}{4}
\end{array}
\right]
\frac{1}{2}
\left[
\begin{array}{rrr}
1 & 1 & 0 \\
-2 & 2 & 0 \\
1 & -2 & 1
\end{array}
\right] \\
& = &
\frac{1}{4}
\left[
\begin{array}{rrr}
3 & 1 & 0 \\
1 & 3 & 0 \\
0 & 3 & 1
\end{array}
\right]
\end{eqnarray*}
и контрольные точки
\( P'\)
соответствующие подзаплатке определяются из условия
\[
P' \: = \: S P S^T
\]
или, что то же,
\begin{eqnarray*} P' & = &
\frac{1}{4}
\left[
\begin{array}{rrr}
3 & 1 & 0 \\
1 & 3 & 0 \\
0 & 3 & 1
\end{array}
\right]
\left[
\begin{array}{ccc}
{\bf P} _{0,0} & {\bf P} _{0,1} & {\bf P} _{0,2} \\
{\bf P} _{1,0} & {\bf P} _{1,1} & {\bf P} _{1,2} \\
{\bf P} _{2,0} & {\bf P} _{2,1} & {\bf P} _{2,2} \\
\end{array}
\right]
\frac{1}{4}
\left[
\begin{array}{rrr}
3 & 1 & 0 \\
1 & 3 & 0 \\
0 & 3 & 1
\end{array}
\right] ^T \\
& = &
\frac{1}{16}
\left[
\begin{array}{ccc}
3 {\bf P} _{0,0} + {\bf P} _{1,0} &
3 {\bf P} _{0,1} + {\bf P} _{1,1} &
3 {\bf P} _{0,2} + {\bf P} _{1,2} \\
{\bf P} _{0,0} + 3 {\bf P} _{1,0} &
{\bf P} _{0,1} + 3 {\bf P} _{1,1} &
{\bf P} _{0,2} + 3 {\bf P} _{1,2} \\
3 {\bf P} _{1,0} + {\bf P} _{2,0} &
3 {\bf P} _{1,1} + {\bf P} _{2,1} &
3 {\bf P} _{1,2} + {\bf P} _{2,2}
\end{array}
\right]
\left[
\begin{array}{rrr}
3 & 1 & 0 \\
1 & 3 & 3 \\
0 & 0 & 1
\end{array}
\right] \\
& = &
\frac{1}{16}
\left[
\begin{array}{ccc}
{\bf P} _{0,0}' & {\bf P} _{0,1}' & {\bf P} _{0,2}' \\
{\bf P} _{1,0}' & {\bf P} _{1,1}' & {\bf P} _{1,2}' \\
{\bf P} _{2,0}' & {\bf P} _{2,1}' & {\bf P} _{2,2}' \\
\end{array}
\right]
\end{eqnarray*}
где
\({\bf P} '_{i,j}\)
может быть записана следующим образом
\[
{\bf P} _{0,0}' = \frac{1}{16} \left(
3 ( 3 {\bf P} _{0,0} + {\bf P} _{1,0} ) +
( 3 {\bf P} _{0,1} + {\bf P} _{1,1} ) \right) \]
\[
{\bf P} _{0,1}' = \frac{1}{16} \left(
( 3 {\bf P} _{0,0} + {\bf P} _{1,0} ) +
3 ( 3 {\bf P} _{0,1} + {\bf P} _{1,1} ) \right) \]
\[
{\bf P} _{0,2}' = \frac{1}{16} \left(
3 ( 3 {\bf P} _{0,1} + {\bf P} _{1,1} ) +
( 3 {\bf P} _{0,2} + {\bf P} _{1,2} ) \right) \]
\[
{\bf P} _{1,0}' = \frac{1}{16} \left(
3 ( {\bf P} _{0,0} + 3 {\bf P} _{1,0} ) +
( {\bf P} _{0,1} + 3 {\bf P} _{1,1} ) \right) \]
\[
{\bf P} _{1,1}' = \frac{1}{16} \left(
( {\bf P} _{0,0} + 3 {\bf P} _{1,0} ) +
3 ( {\bf P} _{0,1} + 3 {\bf P} _{1,1} ) \right) \]
\[
{\bf P} _{1,2}' = \frac{1}{16} \left(
3 ( {\bf P} _{0,1} + 3 {\bf P} _{1,1} ) +
( {\bf P} _{0,2} + 3 {\bf P} _{1,2} ) \right) \]
\[
{\bf P} _{2,0}' = \frac{1}{16} \left(
3 ( 3 {\bf P} _{1,0} + {\bf P} _{2,0} ) +
( 3 {\bf P} _{1,1} + {\bf P} _{2,1} ) \right) \]
\[
{\bf P} _{2,1}' = \frac{1}{16} \left(
( 3 {\bf P} _{1,0} + {\bf P} _{2,0} ) +
3 ( 3 {\bf P} _{1,1} + {\bf P} _{2,1} ) \right) \]
\[
{\bf P} _{2,2}' = \frac{1}{16} \left(
3 ( 3 {\bf P} _{1,1} + {\bf P} _{2,1} ) +
( 3 {\bf P} _{1,2} + {\bf P} _{2,2} ) \right)
\]
Это равенство может быть рассмотрено с двух сторон:
-
Каждая из точек
\({\bf P} _{i,j}\)
использует четыре точки первоначальной прямоугольной решетки в соотношении 9-3-3-1. Таким образом получаем маску
subdivision схемы для генерации новой точки
-
Каждое из этих равенств строит взвешенную точку от угла в пропорции 3:1 и новую взвешенную точку от полученной в
пропорции 3:1. Это в точности совпадает с пропорцией кривой Чайкина, что дает возможность рассматривать этот метод как
обобщение метода Чайкина на случай поверхностей.
Описанный метод предложен Donald Doo и Malcolm Sabin и носит название Doo-Sabin поверхностей.
Doo и Sabin построили точки как взвешенные средние значения четырех точках полигона - в его вершинах:
Легко видеть, что в этом случае однородный B-сплайн дает новую точку (на рисунке Face Point). Таким образом генерируя
новые четыре точки мы получаем новую четырехугольную решетку. Последовательно повторяя этот процесс, получаем описание
исходной поверхности.
Таким образом для каждой вершины \({\bf P} _i\) генерируем новую точку \({\bf P} _i'\) как среднее значение вершин
соответствующей клетки.
Для каждой клетки получаются четыре новые точки, дающие вложенный полигон с вершинами в этих точках.
Соединяя эти точки между собой, получаем новую решетку.
Построенная решетка является исходной для следующего шага.
Описанный метод называется "cutting off the corners" (разрезание углов).