Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Curves.doc
Скачиваний:
51
Добавлен:
01.09.2019
Размер:
4.51 Mб
Скачать

Поверхности b-spline: Важные Свойства

Здесь перечисляются некоторые важные свойства поверхностей B-spline. Эти свойства можно легко проверить, используя те же методы, что и для кривых B-spline. Пожалуйста, сравните эти важные свойства со свойствами кривых B-spline. Вспомним уравнение поверхности B-spline:

,

где степени в направлениях u и v равны p и q, и есть m+1 рядов и n+1 столбцов контр. точек.

  • Неотрицательность: Ni,p(u) Nj,q(v) неотрицательно для всех p, q, i, j и u и v в пределах от 0 до 1. Это очевидно.

  • Деление Единства: Сумма всех Ni,p(u) Nj,q(v) равна 1 для всех u и v в пределах от 0 до 1. Говоря точнее, это значит, что для любой пары чисел u и v в пределах от 0 до 1, выполняется следующее:

  • Свойство Сильного Огранич. Многоугольника: если (u,v) лежит на [ui,ui+1) x [vj,vj+1), то p(u,v) лежит в огранич. многоугольнике контр. точек ph,k, где i-p <= h <= i и j-q <= k <= j. Это свойство для поверхностей B-spline следует прямо из свойства сильноог огранич. многоугольника для кривых B-spline. Для направления u, если u лежит на [ui,ui+1), то существует самое большее p+1 ненулевых базисных функций, а именно Ni,p(u), Ni-1,p(u), ..., и Ni-p,p(u). Таким образом, только контр. точки на рядах с i-p-го по i-й имеют ненулевые базисные функции в направлении u. Аналогично, если v лежит на [vj,vj+1), то существует самое большее q+1 ненулевых базисных функций на этом узловом интервале, а именно Nj,q(v), Nj-1,q(v), ..., и Nj-q,q(v). Таким образом, только контр. точки на столбцах с j-q-го по j-й имеют ненулевые базисные функции в направлении v. Объединяя два этих факта, получаем, что только контр. точки в пределах от ряда i-p до ряда i и от столбца j-q до столбца q имеют ненулевые базисные функции. Так как эти базисные функции неотрицательны и их сумма равна единице (свойство деления единства), то p(u,v) лежит в огранич. многоугольнике этих контр. точек.

В итоге, элемент поверхности, определенный на прямоугольнике [ui,ui+1) x [vj,vj+1), лежит полностью в том же огранич. многоугольнике.

  • Схема Локального Изменения: Ni,p(u)Nj,q(v) равно нулю, если (u,v) находится снаружи прямоугольника [ui,ui+p+1) x [vj,vj+q+1) Из свойства схемы локального изменения мы знаем, что в направлении u Ni,p(u) не равно нулю на [ui,ui+p+1), а в остальных случаях равно нулю. Схема локального изменения для поверхностей B-spline идет прямо от того же свойства кривых. Если контр. точка p3,2 перемещается в новое положение, это показано на следующих рисунках, то только область вокруг этой точки изменяется, а вся остальная поверхность остается неизменной.

  • p(u,v) имеет непрерывность Cp-s (соотв., Cq-t) в направлении u (соотв., v), если u (соотв., v) - это узел множественности s (соотв., t).

  • Инвариантность при Подобных [Affine] Преобразованиях То же самое, что и для кривых - применение преобразований к контр. точкам идентично прменению преобразований к уравнению поверхности.

  • Свойство Уменьшения Изменчивости: Нифига подобного для поверхностей.

  • Если m = p, n = q, а U = { 0, 0, ..., 0, 1, 1, ...., 1 }, то поверхность B-spline становится поверхностью Безье.

Поверхности B-spline: Алгоритм de Boor

Так как вы уже знаете алгоритм de Casteljau для поверхностей Безье, то алгоритм de Boor для поверхностей B-spline и его модификация для поверхностей NURBS - это чуть-чуть посложнее. Фактически, принимая во внимание свойство локального изменения, алгоритм de Boor выглядит очень похожим на алгоритм de Casteljau. Если уравнение поверхности B-spline переписать следующим образом:

,

то для фиксированного i, выражение для кривой в скобках - это просто кривая B-spline, определяемая контр. точками ряда i. Чтобы упростить наше рассуждение, примем (ага, и закусим : ) - прим. перев.)

Таким образом, qi(v) - это точка, соответствующая v на кривой B-spline, определяемой точками на i-м ряду. Если v лежит на узловом интервале [vd,vd+1), то только q+1 контр. точек на ряду i участвуют в вычислении qi(v), где q - это степень Nj,q(v). Эти контр. точки - это pi,d, pi,d-1, ..., pi,d-q, если v не равно vd. В другом случае, если v равно vd, узлу множественности t, то участвующие точки - это pi,d-t, pi,d-t-1, ..., pi,d-q. Таким образом, используя контр. точки с столбца d-q по столбец d-t, где t равно нулю, если v - это не узел, мы можем применить алгоритм de Boor к каждому ряду, чтобы получить m+1 новых точек q0(v), q1(v), ..., qm(v). Это показано на следующей схеме.

Подставляя эти новые точки обратно в уравнение поверхности, получим следующее

Таким образом, p(u,v) - это точка на кривой B-spline, определяемой точками q0(v), q1(v), ..., qm(v). В итоге, чтобы найти p(u,v), все, что нужно сделать - это найти точку на кривой, которая соответствует u. Отсюда, алгоритм de Boor снова подходит для этой цели.

Пусть u лежит на узловом интервале [uc,uc+1). По свойству локального изменения, только p+1 контр. точек будут участвовать в вычислениях, где p - это степень кривой B-spline. Таким образом, если u не равно uc, то зависимые точки - это qc(v), qc-1(v), ...., qc-p(v). В другом случае, если u равно uc, узлу множественности s, зависящие точки - это qc-s(v), qc-s-1(v), ..., qc-p(v). Основываясь на этом наблюдении, хоть из каждого ряда получается qi(v), не все они нужны. Фактически, нужен только p+1 ряд. Это показывает следующая схема:

В итоге, если дано u на [uc,uc+1) и v на [vd,vd+1), p(u,v), для ряда i в пределах между c-p и c-s, применение алгоритма de Boor к контр. точкам pi,d-q, pi,d-q+1, ..., pi,d-t дает новую точку qi(v). Затем, применяя алгоритм de Boor к qc-p(v), qc-p+1(v), ..., qc-s(v) и результат - это p(u,v)!

В итоге, получаем следующее:

Вход: набор m+1 рядов и n+1 столбцов контр. точек, узловые векторы в направлениях u и v и значение (u,v); Выход: точка p(u,v) на поверхности Алгоритм:

Пусть u лежит на [uc,uc+1); Пусть v лежит на [vd,vd+1); Если u не равно uc, примем s равным нулю; иначе s будет множественностью uc; Если v не равно vd, примем t равным нулю; иначе t будет множественностью vd; for i := c-p to c-s do

begin

Применяем алгоритм de Boor к контр. точкам pi,d-q, pi,d-q+1, ..., pi,d-t относительно v; Пусит результат будет qi(v);

end

Применяем алгоритм de Boor к точкам qc-p(v), qc-p+1(v), ..., qc-s(v) относительно u; Полученная точка - это p(u,v);

Следующий рисунок иллюстрирует пример. Это поверхность B-spline, определяемая 5×5 контрю точками и узловым вектором (в обоих направлениях) { 0, 0, 0, 0, 0.5, 1, 1, 1, 1 }. Таким образом, степень кривой в обоих направлениях равна 3.

На этом рисунке ни u, ни v не являются узлами, а u меньше 0.5, так какv больше 0.5. Для этого v, так как оно лежит на [0.5, 1), только контр. точки pi,1, pi,2, pi,3 и pi,4 участвуют в расчете по алгоритму de Boor. Так как u лежит на [0,0.5), то в направлении u используются только ряды 0, 1, 2 и 3. На рисунке красные ломаные нужны для вычисления значений qi(v), а единственная синяя ломаная - для вычисления точки на поверхности.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]