Глава IV
4.4. Определение и Свойства NURBS Поверхностей

NURBS поверхность степени `p` в `u` направлении и степени `q` в `v` направлении двумерная вектор-кусочная рациональная функция вида

`S(u,v)=(sum_(i=0)^nsum_(j=0)^mN_(i,p)(u)N_(j,q)(v)w_(i,j)P_(i,j))/(sum_(i=0)^nsum_(j=0)^mN_(i,p)(u)N_(j,q)(v)w_(i,j))`   `0≤u,v≤1`(4.11)

`{P_(i,j)}` образуют двунаправленную сеть управления, `{w_(i,j)}` являются весами, и `{N_(i,p)(u)}` и `{N_(j,q)(v)}` являются не рациональными B-сплайнами базисных функций определённых на узловых векторах

`U="{"ubrace(0,…,0)_(p+1),u_(p+1),…,u_(r-p-1),ubrace(1,…,1)_(p+1)"}"`

`V="{"ubrace(0,…,0)_(q+1),v_(q+1),…,v_(s-q-1),ubrace(1,…,1)_(q+1)"}"`

где `r=n+p+1` и `s=m+q+1`.

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

`R_(i,j)(u,v)=(N_(i,p)(u)N_(j,q)(v)w_(i,j))/(sum_(k=0)^nsum_(l=0)^mN_(k,p)(u)N_(l,q)(v)w_(k,l))` (4.12)

поверхность из формулы (4.11) можно записать как

`S(u,v)=sum_(i=0)^nsum_(j=0)^mR_(i,j)(u,v)P_(i,j)`(4.13)

Рисунки 4.8 и 4.9 демонстрируют примеры NURBS поверхностей.

Рисунок 4.8. Контрольная сеть и биквадратичная поверхность NURBS, `w_{1,1}=w_{1,2}=w_{2,1}=w_{2,2}=10`, с остальными весами 1. `U=V={0,0,0,`1⁄3,2⁄3,`1,1,1}`. (a) контрольная сеть; (b) биквадратичная поверхность NURBS..

Рисунок 4.9. Поверхность бикубических NURBS, определенная контрольной сеткой на рисунке 4.8a, с `U=V={0,0,0,`1⁄2,`1,1,1}` и с такими же весами, что и на рисунках 4.8.

Важные свойства функций `R_(i,j)(u,v)` примерно те же, что приведены в разделе 3.4 для не рациональных базисных функций, `N_(i,p)(u)N_(j,q)(v)`. Мы суммируем их здесь.

Св.4.15 Не отрицательность: `R_(i,j)(u,v)≥0` для всех `i`, `j`, `u` и `v`;
Св.4.16 Разбиение единицы: `∑_(i=0)^n∑_(j=0)^mR_(i,j)(u,v)=1` для всех `(u,v)∈[0,1]×[0,1]`;
Св.4.17 Локальная поддержка: `R_(i,j)(u,v)=0` если `(u,v)` находится за пределами прямоугольника заданного `[u_i,u_(i+p+1))×x[v_j,v_(j+q+1))`;
Св.4.18 В любом данном прямоугольнике формы `[u_(i_0),u_(i_0+1))x×[v_(j_0),v_(j_0+1))`, в крайнем случае `(p+1)(q+1)` базисные функции не равны нулю, в частности, `R_(i,j)(u,v)` для `i_0-p≤i≤i_0` и `j_0-q≤j≤j_0` отличны от нуля;
Св.4.19 Экстремум: Если `p>0` и `q>0`, тогда `R_(i,j)(u,v)` достигает только одного максимального значения;
Св.4.20 `R_{0,0}(0,0)=R_(n,0)(1,0)=R_(0,m)(0,1)=R_(n,m)(1,1)=1`;
Св.4.21 О дифференцируемости: внутри прямоугольника, образованного `u` и `v` узловыми линиями, все частные производные `R_(i,j)(u,v)` существуют. В `u` узле (`v` узле), она `p-k` (`q-k`) раз дифференцируема в `u` (`v`) направлении, где `k` является кратность узла;
Св.4.22 Если все `w_(i,j)=a` для `0≤i≤n`, `0≤j≤m` и `a≠0`, тогда `R_(i,j)(u,v)=N_(i,p)(u)N_(j,q)(v)` для всех `i`, `j`;

Свойства Св.4.15 - Св.4.22 дают следующие важные геометрические свойства NURBS поверхностей:

Св.4.23 Интерполяция угловых точек: `S(0,0)=P_{0,0}`, `S(1,0)=P_(n,0)`, `S(0,1)=P_(0,m)`, и `S(1,1)=P_(n,m)`
Св.4.24 Аффинная инвариантность: аффинное преобразование, применяемое к поверхности, применяется к её контрольным точкам;
Св.4.25 Сильное свойство выпуклой оболочки: предположим `w_(i,j)≥0` для всех `i`, `j`. Если `(u,v)∈[u_(i_0),u_(i_0+1))×[v_(j_0),v_(j_0+1))`, тогда `S(u,v)` выпуклая оболочка контрольных точек `P_(i,j)`, `i_0-p≤i≤i_0` и `j_0-q≤j≤j_0`;
Св.4.26 Местное изменение: если `P_(i,j)` перемещается, или меняется, это влияет на форму поверхности только в прямоугольнике `[u_i,u_(i+p+1))×[v_j,v_(j+q+1))`;
Св.4.27 Нерациональные B-сплайны, и Безье, и рациональные Безье поверхности – всё частные случаи поверхностей NURBS;
Св.4.28 О дифференцируемости: `S(u,v)` `p-k` (`q-k`) раз дифференцируема в `u` (`v`) направлении, где `k` является кратность узла;
Заметим, что нет никакого известного свойства изменения уменьшения для NURBS поверхностей (смотри [ Prau92]).

Мы можем использовать как движение точки управления и модификации веса для локального изменения формы NURBS поверхностей. Рисунки 4.10 и 4.11 показывают изменения базисной функции `R_(i,j)(u,v)` и формы поверхности, когда одиночный вес, `w_(i,j)`, будет изменен. Сравните эти рисунки с рисунками 3.19б и 3.20а, б. Качественно, эффект на поверхности: Предположим, `(u,v)∈[u_i,u_(i+p+1))×[v_j,v_(j+q+1))`; затем, если `w_(i,j)` увеличивается (уменьшается), точка `S(u,v)` приближается к (удаляется от) `P_(i,j)`, следовательно, поверхность притягивается к (отталкивается от) `P_(i,j)`. Как и в слу­чае кривых, движение `S(u,v)` вдоль прямой линии. На рисунке 4.12 `(u,v)` являются фиксированными и `w_{2,2}` меняется. Пусть

`S=S(u,v;w_{2,2}=0)`

`M=S(u,v;w_{2,2}=1)`(4.14)

Тогда прямая определённая `S` и `M` проходит через `P_{2,2}`, а для произвольной `w_{2,2}`, `0<w_{2,2}<∞`, `S_{2,2}` лежит на этом сегменте линии между `S` и `P_{2,2}`.

Рисунок 4.10. Базисная функция `R_{4,2}(u,v)`, с `U={0,0,0,0,`1⁄4,1⁄2,3⁄4,`1,1,1,1}` и `V={0,0,0,`1⁄5,2⁄5,3⁄5,3⁄5,4⁄5,`1,1,1}`. `w_{i,4}=1` для всех `(i,j)!=(4,2)`. (a) `w_{4,2}=`2⁄5; (b) `w_{4,2}=6`.

Рисунок 4.11. Кубические `xx` квадратичные поверхности, соответствующие рисунку 4.10, со смещением контрольной сетки для лучшей визуализации, (a) `w_{4,2}=`2⁄5; (b) `w_{4,2}=6`.

Рисунок 4.12. Модификация веса `w_{2,2}`.

Это удобно для представления NURBS поверхности с помощью однородных координат, то есть

`S^w(u,v)=sum_(i=0)^nsum_(j=0)^mN_(i,p)(u)N_(j,q)(v)P_(i,j)^w`(4.15)

где `P_(i,j)^w=(w_(i,j)x_(i,j),w_(i,j)y_(i,j),w_(i,j)z_(i,j),w_(i,j))`. Тогда `S(u,v)=H{S^w(u,v)}`. Мы имеем в виду попеременно либо `S^w(u,v)` или `S(u,v)` для поверхности NURBS. Строго говоря, `S^w(u,v)` является тензорным произведением, кусочно-многочленной поверхности в четырехмерном пространстве. `S(u,v)` является кусочно-рациональной поверхностью в трехмерном пространстве; это не является поверхностью тензорного произведения, так как `R_(i,j)(u,v)` не являются продуктами одномерных базисных функций.

Примеры

Пример4.3 Пусть `S^w(u,v)=sum_{i=0}^7sum_{j=0}^4N_{i,2}(u)N_{j,2}(v)`, с

`U={0,0,0,1,2,3,4,4,5,5,5}`

и   `V={0,0,0,1,2,3,3,3}`

Оценим поверхность при `(u,v)=(5/2,1)`. Тогда `u in [u4, u5)` и `v in [v_3,v_4)`, и из разделов 3.2 и 4.2 мы знаем, что

`N_{2,2}(5/2)=1/8`   `N_{3,2}(5/2)=6/8`   `N_{4,2}(5/2)=1/8`

и   `N_{1,2}(1)=1/2`   `N_{2,2}(1)=1/2`   `N_{3,2}(1)=0`

Теперь предположим, что

`[P_{i,j}^w]=[["(0,2,4,1)","(0,6,4,2)","(0,2,0,1)"], ["(4,6,8,2)","(12,24,12,6)","(4,6,0,2)"], ["(4,2,4,1)","(8,6,4,2)","(4,2,0,1)"]]`

`i=2,3,4`   `j=1,2,3`

Тогда

`S^w(5/2,1)=[1/8 6/8 1/8] xx [["(0,2,4,1)","(0,6,4,2)","(0,2,0,1)"], ["(4,6,8,2)","(12,24,12,6)","(4,6,0,2)"], ["(4,2,4,1)","(8,6,4,2)","(4,2,0,1)"]] [[1/2],[1/2],[0]]` `=(54/8,98/8,68/8,27/8)`

Проекция даёт

`S(5/2,1)=(2,98/27,68/27)`

Алгоритм A3.5 можно адаптировать для вычисления точки на рациональной поверхности В-сплайна, просто позволяя массиву Р содержать взвешенные контрольные точки (использование Pw), накапливая четырехмерные точки поверхности в Sw и вставляя линии S = Sw/w в конце алгоритма.

Алгоритм А4.3

SurfacePoint(n,p,U,m,q,V,Pw,u,v,S)
{ /* Вычислить  точку  на  рациональной  B-сплайн  поверхности */
  /* Вход: n,p,U,m,q,V,Pw,u,v */
  /* Выход: S */
uspan = FindSpan(n,p,u,U);
BasisFuns(uspan,u,p,U,Nu);
vspan = FindSpan(m,q,v,V);
BasisFuns(vspan,v,q,V,Nv);
uind = uspan – p;
S = 0.0;
for (l=0; l<=q; l++)
   {
   temp[l] = 0.0;
   for (k=0; k<=p; k++)
      temp[l] = temp[l] + Nu[k]*Pw[uspan – p +k][vspan – q + l];
   }
Sw = 0.0;
for (l=0; l<=q; l++)
   Sw = Sw + Nv[l]*temp[l];
S = Sw/w;
}
    

Применяя формулы (3.14) и (3.15), мы получим изопараметрические кривые на NURBS поверхности. Во-первых, установим `u=u_0`

`С_(u_0)^w=S^w(u_0,v)=sum_(i=0)^nsum_(j=0)^mN_(i,p)(u_0)N_(j,q)(v)P_(i,j)^w` (4.16)

`=sum_(j=0)^mN_(j,q)(v)(sum_(i=0)^nN_(i,p)(u_0)P_(i,j)^w)=sum_(j=0)^mN_(j,q)(v)Q_j^w(u_0)`

где   `Q_j^w(u_0)=sum_(i=0)^nN_(i,p)(u_0)P_(i,j)^w`

Аналогично   `С_(v_0)^w=sum_(i=0)^nN_(i,p)(u)Q_i^w(v_0)` (4.17)

где   `Q_i^w(v_0)=sum_(j=0)^mN_(j,q)(v_0)P_(i,j)^w`

`С_(u_0)^w`, `(С_(v_0)^w)` это `q`ой(`p`ой)-степени NURBS кривая с узловым вектором `V` (`U`). Точка `S^w(u_0,v_0)` лежит на пересечении `С_(u_0)^w` и `С_(v_0)^w`. Результат проекции

`С_(u_0)(v)=H{С_(u_0)^w(v)}=H{S^w(u_0,v)}=S(u_0,v)`

`С_(v_0)(u)=H{С_(v_0)^w(u)}=H{S^w(u,v_0)}=S(u,v_0)`(4.18)