Есть несколько способов, чтобы определить базисные функции B-сплайна и доказать их важные свойства, например, разделенных разностей усеченных функций мощности [Curr47; Scho46], расцвета [Rams87], и повторяемости формулы. Мы используем рекуррентную формулу [Cox72; DeBo72, 78], так как это наиболее полезно для компьютерной реализации.
Пусть `U={u_0,…,u_m}` неубывающая последовательность вещественных чисел, т. е. `u_i≤u_{i+1},i=0,…,m-1`. Где `u_i` называются узлы, и `U` является узловым вектором. `i`ая базисная функция B-сплайна `p`-й степени (порядок `p+1`), обозначается `N_{i,p}(u)`, определяется как
`N_{i,0}(u)={(1 "если" u_i≤u≤u_{i+1}),(0 "в противном случае"):}`
`N_{i,p}(u)=(u-u_i)/(u_{i+p}-u_i)N_{i,p-1}(u)+(u_{i+p+1}-u)/(u_{i+p+1}-u_{i+1})N_{i+1,p-1}(u)`(2.5)
Обратите внимание, что
Рисунок 2.3. Рекурсивное определение базисных функций B-сплайна.
`N_{0,0}` | |||
`N_{0,1}` | |||
`N_{1,0}` | `N_{0,2}` | ||
`N_{1,1}` | `N_{0,3}` | ||
`N_{2,0}` | `N_{1,2}` | ||
`N_{2,1}` | `N_{1,3}` | ||
`N_{3,0}` | `N_{2,2}` | `vdots` | |
`N_{3,1}` | `vdots` | ||
`N_{4,0}` | `vdots` | ||
`vdots` | |||
Слово о терминологии. В разделе 2.1, мы использовали термин точка прерывания и требовали `u_i<u_{i+1}` для всех `i`. В оставшейся части этой книги, мы будем использовать термин узел и предположим, `u_i≤u_{i+1}`. Точки прерывания соответствуют набору различных значений узлов, а промежуточные узлы ненулевой длины определяются отдельными многочленным сегментом. Таким образом, мы используем слово узел с двумя разными значениями: отдельное значение (точка прерывания) в наборе `U`, и элемент множества `U` (могут существовать дополнительные узлы в `U`, имеющие одинаковое значение). Это должно быть ясно из контекста, что подразумевается.
Примеры
Пример2.1 | Пусть `U={u_0=0,u_1=0,u_2=0,u_3=1,u_4=1,u_5=1}` и `p=2`. Вычислим теперь базисную функцию B-сплайна
степеней 0, 1, и 2
`N_{0,0}=N_{1,0}=0` `-oo<u<oo` `N_{2,0}={(1 0<=u<1),(0 "иначе"):}` `N_{3,0}=N_{4,0}=0` `-oo<u<oo` `N_{0,1}={u-0}/{0-0}N_{0,0}+{0-u}/{0-0}N_{1,0}=0` `-oo<u<oo` `N_{1,1}={u-0}/{0-0}N_{1,0}+{1-u}/{1-0}N_{2,0}={(1-u,0<=u<1),(0,"иначе"):}` `N_{2,1}={u-0}/{1-0}N_{2,0}+{1-u}/{1-1}N_{3,0}={(u,0<=u<1),(0,"иначе"):}` `N_{3,1}={u-1}/{1-1}N_{3,0}+{1-u}/{1-1}N_{4,0}=0` `-oo<u<oo` `N_{0,2}={u-0}/{0-0}N_{0,1}+{1-u}/{1-0}N_{1,1}={((1-u)^2,0<=u<1),(0,"иначе"):}` `N_{1,2}={u-0}/{1-0}N_{1,1}+{1-u}/{1-0}N_{2,1}={(2u(1-u),0<=u<1),(0,"иначе"):}` `N_{2,2}={u-0}/{1-0}N_{2,1}+{1-u}/{1-1}N_{3,1}={(u^2,0<=u<1),(0,"иначе"):}` Отметим, что `N_{i,2}`, ограниченные интервалом `u in [0,1]`, являются квадратичными многочленами Бернштейна (раздел 1.3 и рисунок 1.13b). По этой причине B-сплайн-представление с вектором узла вида`U="{"ubrace(0,ldots,0)_(p+1),ubrace(1,ldots,1)_(p+1)"}"` является обобщением представления Безье. |
Пример2.2 | Пусть `U={u_0=0,u_1=0,u_2=0,u_3=1,u_4=2,u_5=3,u_6=4,u_7=4,u_8=5,u_9=5,u_10=5}` и `p=2`. Нулевой-,
первый-, и базисные функции второй степени вычисляются здесь. Те, которые не равны нулю показаны на
рисунках 2.4, 2.5 и 2.6 соответственно
`N_{0,0}=N_{1,0}=0` для `-oo<u<oo` `N_{2,0}={(1 0<=u<1),(0 "иначе"):}` `N_{3,0}={(1 1<=u<2),(0 "иначе"):}` `N_{4,0}={(1 2<=u<3),(0 "иначе"):}` `N_{5,0}={(1 3<=u<4),(0 "иначе"):}` `N_{6,0}=0` для `-oo<u<oo` `N_{7,0}={(1 4<=u<5),(0 "иначе"):}` `N_{8,0}=N_{9,0}=0` для `-oo<u<oo` `N_{0,1}={u-0}/{0-0}N_{0,0}+{0-u}/{0-0}N_{1,0}=0` `-oo<u<oo` `N_{1,1}={u-0}/{0-0}N_{1,0}+{1-u}/{1-0}N_{2,0}={(1-u,0<=u<1),(0,"иначе"):}` `N_{2,1}={u-0}/{1-0}N_{2,0}+{2-u}/{2-1}N_{3,0}={(u,0<=u<1),(2-u,1<=u<2),(0,"иначе"):}` `N_{3,1}={u-1}/{2-1}N_{3,0}+{3-u}/{3-2}N_{4,0}={(u-1,1<=u<2),(3-u,2<=u<3),(0,"иначе"):}` `N_{4,1}={u-2}/{3-2}N_{4,0}+{4-u}/{4-3}N_{5,0}={(u-2,2<=u<3),(4-u,3<=u<4),(0,"иначе"):}` `N_{5,1}={u-3}/{4-3}N_{5,0}+{4-u}/{4-4}N_{6,0}={(u-3,3<=u<4),(0,"иначе"):}` `N_{6,1}={u-4}/{4-4}N_{6,0}+{5-u}/{5-4}N_{7,0}={(5-u,4<=u<5),(0,"иначе"):}` `N_{7,1}={u-4}/{5-4}N_{7,0}+{5-u}/{5-5}N_{8,0}={(u-4,4<=u<5),(0,"иначе"):}` `N_{8,1}={u-5}/{5-5}N_{8,0}+{5-u}/{5-5}N_{9,0}=0` `-oo<u<oo` Все последующие `N_{i,2}` по оси ноль везде, кроме указанных интервалов, то есть`N_{0,2}={u-0}/{0-0}N_{0,1}+{1-u}/{1-0}N_{1,1}=(1-u)^2` `0<=u<1` `N_{1,2}={u-0}/{1-0}N_{1,1}+{2-u}/{2-0}N_{2,1}={(2u-3⁄2u^2,0<=u<1),(1⁄2(2-u)^2,1<=u<2):}` `N_{2,2}={u-0}/{2-0}N_{2,1}+{3-u}/{3-1}N_{3,1}={(1⁄2u^2,0<=u<1),(-3⁄2+3u-u^2,1<=u<2),(1⁄2(3-u)^2,2<=u<3):}` `N_{3,2}={u-1}/{3-1}N_{3,1}+{4-u}/{4-2}N_{4,1}={(1⁄2(u-1)^2,1<=u<2),(-11⁄2+5u-u^2,2<=u<3),(1⁄2(4-u)^2,3<=u<4):}` `N_{4,2}={u-2}/{4-2}N_{4,1}+{4-u}/{4-3}N_{5,1}={(1⁄2(u-2)^2,2<=u<3),(-16+10u-3⁄2u^2,3<=u<4):}` `N_{5,2}={u-3}/{4-3}N_{5,1}+{5-u}/{5-4}N_{6,1}={((u-3)^2,3<=u<4),((5-u)^2,4<=u<5):}` `N_{6,2}={u-4}/{5-4}N_{6,1}+{5-u}/{5-4}N_{7,1}=2(u-4)(5-u)` `4<=u<5` `N_{7,2}={u-4}/{5-4}N_{7,1}+{5-u}/{5-5}N_{8,1}=(u-4)^2` `4<=u<5` |
Рисунок 2.4. Ненулевые базисные функции нулевой степени, `U={0,0,0,1,2,3,4,4,5,5,5}`
Рисунок 2.5. Ненулевые базисные функции первой степени, `U={0,0,0,1,2,3,4,4,5,5,5}`
Рисунок 2.6. Ненулевые базисные функции второй степени, `U={0,0,0,1,2,3,4,4,5,5,5}`
Теперь мы перечислим ряд важных свойств базисных функций B-сплайнов. Как мы увидим в следующей главе, эти свойства, которые определяют многие желательные геометрические характеристики в кривых B-сплайнов и поверхностей. Предположим, степень `p` и узловой вектор `U={u_0,…,u_m}`.
Св.2.1 | `N_{i,p}(u)=0` если u находится за пределами интервала `[u_i,u_{i+p+1}` (свойство локальной
поддержки). Это иллюстрируется треугольной схемой, показанной здесь. Обратите внимание, что `N_{1,3}`
является сочетание `N_{1,0}`, `N_{2,0}`, `N_{3,0}`, и `N_{4,0}`. Таким образом, `N_{1,3}` отлична от
нуля только для и `u∈[u_1,u_5)`
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Св.2.2 | В любом промежуточном узле, `[u_j,u_{j+1})`, не превосходит `p+1` если `N_{i,p}` отличны от нуля, а
именно функции `N_{j-p,p},…,N_{j,p}`. `[u_3,u_4)` отличны от нуля только функция нулевой степени
`N_{3,0}`. Таким образом, только кубическая функция не равна нулю на `[u_3,u_4)` являются
`N_{0,3},…,N_{3,3}`. Это свойство проиллюстрировано здесь
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Св.2.3 | `N_{i,p}(u)≥0` для всех `i`, `p`, и `u` (неотрицательных). Это доказано индукцией по `p`. Это, очевидно,
справедливо для `p=0`; предположить, что это верно для `p-1`, `p≥0`, с `i` и `u` произвольными. По
определению
`N_{i,p}(u)={u-u_i}/{u_{i+p}-u_i}N_{i,p-1}(u)+{u_{i+p+1}-u}/{u_{i+p+1}-u_{i+1}}N_{i+1,p-1}(u)` (2.6) Из Св.2.1, `N_{i,p-1}(u)=0` если `u∈[u_i,u_{i+p+1})`. Но если `u∈[u_i,u_{i+p+1})`, то следует`{u-u_i}/{u_{i+p}-u_i}` неотрицательна. По предположению, `N_{i,p-1}(u)` неотрицательна, и, таким образом первый член уравнения (2.6) неотрицателен. То же самое верно и для второй части, и, следовательно, `N_{i,p}(u)` неотрицательны; |
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Св.2.4 | Для произвольного промежуточного узла, `[u_i,u_{i+1})`, `∑_{j=i-p}^iN_{j,p}(u)=1` для всех
`u∈[u_i,u_{i+1})` (разбиение единицы). Чтобы доказать это, рассмотрим
`sum_{j=i-p}^iN_{j,p}(u)=sum_{j=i-p}^i{u-u_j}/{u_{j+p}-u_j}N_{j,p-1}(u)+sum_{j=i-p}^i{u_{j+p+1}-u}/{u_{j+p+1}-u_{j+1}}N_{j+1,p-1}(u)` Изменение переменной суммирования во второй сумме от `i-p` до `i-p+1`, и учитывая, что `N_{i-p,p-1}(u)=N_{i+1,p-1}(u)=0`, мы имеем`sum_{j=i-p}^iN_{j,p}(u)=sum_{j=i-p+1}^i[{u-u_j}/{u_{j+p}-u_j}+{u_{j+p}-u}/{u_{j+p}-u_j}]N_{j,p-1}(u)=sum_{j=i-p+1}^iN_{j,p-1}(u)` Применение же концепции рекурсивно дает`sum_{j=i-p}^iN_{j,p}(u)=sum_{j=i-p+1}^iN_{j,p-1}(u)=sum_{j=i-p+2}^iN_{j,p-2}(u)=⋯=sum_{j=i}^iN_{j,0}(u)=1` |
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Св.2.5 | Все производные `N_{i,p}(u)` существуют в интерьере промежуточного узла (где многочлен, рис 2.7). В узле `N_{i,p}(u)` `p-k` раз непрерывно дифференцируема, где `k`
является кратность узла. Следовательно, увеличение степени увеличивает непрерывность и увеличение
кратности узла уменьшается непрерывность;
Рисунок 2.7. Разложение `N_{3,2}` на его многочленные части (параболы). |
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Св.2.6 | Для случая `p=0`, кроме, `N_{i,p}(u)` достигает ровно один максимальное значение.
Важно понять, каково влияние нескольких узлов. Рассмотрим функции `N_{0,2}`, `N_{1,2}`, `N_{2,2}`, `N_{5,2}`, и `N_{6,2}` на рис 2.6. Напоминая, что `U={0,0,0,1,2,3,4,4,5,5,5}` из уравнения (2.5) и Св.2.1, мы видим, что эти функции вычисляются по следующим промежуточным узлам и равны нулю вне этих интервалов `N_{0,2} : {0,0,0,1}` `N_{1,2} : {0,0,1,2}` `N_{2,2} : {0,1,2,3}` `N_{5,2} : {3,4,4,5}` `N_{6,2} : {4,4,5,5}` Теперь слово «множественность» понимается в двух разных смысл:
|