NURBS поверхность степени p в u направлении и степени q в v направлении двумерная вектор-кусочная рациональная функция вида
S(u,v)=∑ni=0∑mj=0Ni,p(u)Nj,q(v)wi,jPi,j∑ni=0∑mj=0Ni,p(u)Nj,q(v)wi,j 0≤u,v≤1(4.11)
{Pi,j} образуют двунаправленную сеть управления, {wi,j} являются весами, и {Ni,p(u)} и {Nj,q(v)} являются не рациональными B-сплайнами базисных функций определённых на узловых векторахU={0,…,0⏟p+1,up+1,…,ur-p-1,1,…,1⏟p+1}
V={0,…,0⏟q+1,vq+1,…,vs-q-1,1,…,1⏟q+1}
где r=n+p+1 и s=m+q+1.Представляем кусочно рациональные базисные функции
Ri,j(u,v)=Ni,p(u)Nj,q(v)wi,j∑nk=0∑ml=0Nk,p(u)Nl,q(v)wk,l (4.12)
поверхность из формулы (4.11) можно записать какS(u,v)=n∑i=0m∑j=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=0∑mj=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-p≤i≤i0 и j0-q≤j≤j0 отличны от нуля; |
Св.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 для 0≤i≤n, 0≤j≤m и a≠0, тогда 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,j≥0 для всех i, j. Если (u,v)∈[ui0,ui0+1)×[vj0,vj0+1), тогда S(u,v) выпуклая оболочка контрольных точек Pi,j, i0-p≤i≤i0 и j0-q≤j≤j0; |
Св.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 поверхностей. Рисунки 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)=n∑i=0m∑j=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)=7∑i=04∑j=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)=18 N3,2(52)=68 N4,2(52)=18 и N1,2(1)=12 N2,2(1)=12 N3,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,4 j=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 в конце алгоритма.
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)=n∑i=0m∑j=0Ni,p(u0)Nj,q(v)Pwi,j (4.16)
=m∑j=0Nj,q(v)(n∑i=0Ni,p(u0)Pwi,j)=m∑j=0Nj,q(v)Qwj(u0)
где Qwj(u0)=n∑i=0Ni,p(u0)Pwi,j
Аналогично Сwv0=n∑i=0Ni,p(u)Qwi(v0) (4.17)
где Qwi(v0)=m∑j=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)