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

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

S(u,v)=ni=0mj=0Ni,p(u)Nj,q(v)wi,jPi,jni=0mj=0Ni,p(u)Nj,q(v)wi,j0u,v1(4.11)

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

U={0,,0p+1,up+1,,ur-p-1,1,,1p+1}

V={0,,0q+1,vq+1,,vs-q-1,1,,1q+1}

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

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

Ri,j(u,v)=Ni,p(u)Nj,q(v)wi,jnk=0ml=0Nk,p(u)Nl,q(v)wk,l (4.12)

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

S(u,v)=ni=0mj=0Ri,j(u,v)Pi,j(4.13)

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

Рисунок 4.8. Контрольная сеть и биквадратичная поверхность NURBS, w1,1=w1,2=w2,1=w2,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.

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

Св.4.15 Не отрицательность: Ri,j(u,v)0 для всех i, j, u и v;
Св.4.16 Разбиение единицы: ni=0mj=0Ri,j(u,v)=1 для всех (u,v)[0,1]×[0,1];
Св.4.17 Локальная поддержка: Ri,j(u,v)=0 если (u,v) находится за пределами прямоугольника заданного [ui,ui+p+1)×x[vj,vj+q+1);
Св.4.18 В любом данном прямоугольнике формы [ui0,ui0+1)x×[vj0,vj0+1), в крайнем случае (p+1)(q+1) базисные функции не равны нулю, в частности, Ri,j(u,v) для i0-pii0 и j0-qjj0 отличны от нуля;
Св.4.19 Экстремум: Если p>0 и q>0, тогда Ri,j(u,v) достигает только одного максимального значения;
Св.4.20 R0,0(0,0)=Rn,0(1,0)=R0,m(0,1)=Rn,m(1,1)=1;
Св.4.21 О дифференцируемости: внутри прямоугольника, образованного u и v узловыми линиями, все частные производные Ri,j(u,v) существуют. В u узле (v узле), она p-k (q-k) раз дифференцируема в u (v) направлении, где k является кратность узла;
Св.4.22 Если все wi,j=a для 0in, 0jm и a0, тогда Ri,j(u,v)=Ni,p(u)Nj,q(v) для всех i, j;

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

Св.4.23 Интерполяция угловых точек: S(0,0)=P0,0, S(1,0)=Pn,0, S(0,1)=P0,m, и S(1,1)=Pn,m
Св.4.24 Аффинная инвариантность: аффинное преобразование, применяемое к поверхности, применяется к её контрольным точкам;
Св.4.25 Сильное свойство выпуклой оболочки: предположим wi,j0 для всех i, j. Если (u,v)[ui0,ui0+1)×[vj0,vj0+1), тогда S(u,v) выпуклая оболочка контрольных точек Pi,j, i0-pii0 и j0-qjj0;
Св.4.26 Местное изменение: если Pi,j перемещается, или меняется, это влияет на форму поверхности только в прямоугольнике [ui,ui+p+1)×[vj,vj+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 показывают изменения базисной функции Ri,j(u,v) и формы поверхности, когда одиночный вес, wi,j, будет изменен. Сравните эти рисунки с рисунками 3.19б и 3.20а, б. Качественно, эффект на поверхности: Предположим, (u,v)[ui,ui+p+1)×[vj,vj+q+1); затем, если wi,j увеличивается (уменьшается), точка S(u,v) приближается к (удаляется от) Pi,j, следовательно, поверхность притягивается к (отталкивается от) Pi,j. Как и в слу­чае кривых, движение S(u,v) вдоль прямой линии. На рисунке 4.12 (u,v) являются фиксированными и w2,2 меняется. Пусть

S=S(u,v;w2,2=0)

M=S(u,v;w2,2=1)(4.14)

Тогда прямая определённая S и M проходит через P2,2, а для произвольной w2,2, 0<w2,2<, S2,2 лежит на этом сегменте линии между S и P2,2.

Рисунок 4.10. Базисная функция R4,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}. wi,4=1 для всех (i,j)(4,2). (a) w4,2=2⁄5; (b) w4,2=6.

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

Рисунок 4.12. Модификация веса w2,2.

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

Sw(u,v)=ni=0mj=0Ni,p(u)Nj,q(v)Pwi,j(4.15)

где Pwi,j=(wi,jxi,j,wi,jyi,j,wi,jzi,j,wi,j). Тогда S(u,v)=H{Sw(u,v)}. Мы имеем в виду попеременно либо Sw(u,v) или S(u,v) для поверхности NURBS. Строго говоря, Sw(u,v) является тензорным произведением, кусочно-многочленной поверхности в четырехмерном пространстве. S(u,v) является кусочно-рациональной поверхностью в трехмерном пространстве; это не является поверхностью тензорного произведения, так как Ri,j(u,v) не являются продуктами одномерных базисных функций.

Примеры

Пример4.3 Пусть Sw(u,v)=7i=04j=0Ni,2(u)Nj,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)=(52,1). Тогда u[u4,u5) и v[v3,v4), и из разделов 3.2 и 4.2 мы знаем, что

N2,2(52)=18N3,2(52)=68N4,2(52)=18

и   N1,2(1)=12N2,2(1)=12N3,2(1)=0

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

[Pwi,j]=[(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,4j=1,2,3

Тогда

Sw(52,1)=[186818]×[(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)][12120] =(548,988,688,278)

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

S(52,1)=(2,9827,6827)

Алгоритм 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=u0

Сwu0=Sw(u0,v)=ni=0mj=0Ni,p(u0)Nj,q(v)Pwi,j (4.16)

=mj=0Nj,q(v)(ni=0Ni,p(u0)Pwi,j)=mj=0Nj,q(v)Qwj(u0)

где   Qwj(u0)=ni=0Ni,p(u0)Pwi,j

Аналогично   Сwv0=ni=0Ni,p(u)Qwi(v0) (4.17)

где   Qwi(v0)=mj=0Nj,q(v0)Pwi,j

Сwu0, (Сwv0) это qой(pой)-степени NURBS кривая с узловым вектором V (U). Точка Sw(u0,v0) лежит на пересечении Сwu0 и Сwv0. Результат проекции

Сu0(v)=H{Сwu0(v)}=H{Sw(u0,v)}=S(u0,v)

Сv0(u)=H{Сwv0(u)}=H{Sw(u,v0)}=S(u,v0)(4.18)