Читайте также:
|
|
Базисные функции Безье использовались в качестве весов. Базисные функции B-spline будут использоваться так же; тем не менее, они гораздо более сложны. Есть два интересных свойства, которые не являются частью базисных функций Безье, а именно: (1) интервал разделяется узлами, и (2) базисные функции не являются ненулевыми на всем интервале. Фактически, каждая базисная функция B-spline является ненулевой на нескольких смежных под-интервалах и, в итоге, базисные функции B-spline являются вполне "локальными".
Пусть U - это последовательность m + 1 неубывающих действительных чисел, u 0 <= u 2 <= u 3 <=... <= um. Числа ui называются узлами, последовательность U - узловым вектором, а полуоткрытый интервал [ ui, ui +1) - i-м узловым диапазоном. Заметьте, так как некоторые ui могут быть равны, то соответствующих узловых диапазонов может не существовать. Если узел ui появляется k раз (i.e., u i = ui +1 =... = ui+k -1), где k > 1, ui называется множественным узлом k -й множественности, пишется ui (k). Иначе, если ui появляется лишь однажды, это - простой узел. Если узлы равномерно разделены (т.e. ui +1 - ui постоянно для 0 <= i <= m - 1), узловой вектор или последовательность узлов называется однородной(-ым); иначе, неоднородной.
Узлы можно представить как точки, делящие интервал [ u 0, um ] на узловые интервалы. Все базисные функции B-spline должны иметь область определения на [ u 0, um ]. Таким образом, используем u 0 = 0 и um = 1, чтобы преобразовать интервал в [0,1].
Чтобы описать базисные функции B-spline, нужен еще один параметр, степень этих базисных функций, p. i -я базисная функция B-spline степени p (пишется Ni,p (u)), описывается рекурсивно:
Вышеуказанное уравнение обычно называют рекурсивной формулой Cox - de Boor. Это определение выглядит сложным. Но оно просто для понимания. Если степень равна нулю (т.e., p = 0), эти базисные функции являются скачковыми и это как раз то, о чем говорит первое выражение в формуле. То есть, базисная функция Ni ,0(u) равна 1, если u лежит на i -м узловом интервале [ ui, ui +1). Например, если есть четыре узла u 0 = 0, u 1 = 1, u 2 = 2 и u 3 = 3, узловые интервалы 0, 1 и 2 - это [0,1), [1,2), [2,3) и базисные функции 0 степени - это N 0,0(u) = 1 на [0,1) и 0 в других случаях, N 1,0(u) = 1 на [1,2) и 0 в других случаях, и N 2,0(u) = 1 на [2,3) и 0 в других случаях. Это показано ниже:
Чтобы понять принцип расчета Ni,p (u) для p больше 0, вернемся к треуголной схеме расчета. Все узловые интервалы - в левом (первом) столбце, а все базисные функции нулевой степени - во втором. Это показано на следующей диаграмме.
Чтобы вычислить Ni ,1(u), нужно Ni ,0(u) и Ni +1,0(u). Таким образом, мы можем вычислить N 0,1(u), N 1,1(u), N 2,1(u), N 3,1(u) и так далее. Все эти Ni ,1(u) записываются в третий столбец. Когда будут найдены Ni ,1(u), можно будет вычислить Ni ,2(u) и записать их в четвертый столбец. Продолжаем в том же духе, пока не вычислим все нужные Ni , p (u).
Выше мы нашли N 0,0(u), N 1,0(u) и N 2,0(u) для узлового вектора U = { 0, 1, 2, 3 }. Давайте вычислим N 0,1(u) и N 1,1(u). Чтобы вычислить N 0,1(u), так как i = 0 и p = 1, по определению имеем
N 0,1(u) = (u - u 0) / (u 1 - u 0) N 0,0(u) + (u 2 - u) / (u 2 - u 1) N 1,0(u)
Так как u 0 = 0, u 1 = 1 и u 2 = 2, вышеизложенное преобразуется к виду
N 0,1(u) = u N 0,0(u) + (2 - u) N 1,0(u)
Так как N 0,0(u) не равно нулю на [0,1), а N 1,0(u) не равно нулю на [1,2), когда u лежит на [0,1) (соотв., на [1,2)), только N 0,0(u) (соотв., N 1,0(u)) влияет на [? contributes to] N 0,1(u). Таким образом, когда u в пределах [0,1), N 0,1(u) равно uN 0,0(u) = u, а когда u в пределах [1,2), N 0,1(u) равно (2 - u) N 1,0(u) = (2 - u). Простые вычисления дают N 1,1(u) = u - 1, если u лежит на [1,2), а N 1,1(u) = 3 - u, если u лежит на [2,3). На следующем рисунке черные и красные линии - это соответственно N 0,1(u) и N 1,1(u). Заметьте, что N 0,1(u) (соотв., N 1,1(u)) не равно нулю на [0,1) и [1,2) (соотв., на [1,2) и [2,3)).
Как только будут найдены N 0,1(u) и N 1,1(u), можно вычислить N 0,2(u). Из определения следует:
N 0,2(u) = (u - u 0) / (u 2 - u 0) N 0,1(u) + (u 3 - u) / (u 3 - u 1) N 1,1(u)
Подставляя эти значения узлов, имеем
N 0,2(u) = 0.5 u N 0,1(u) + 0.5 (3 - u) N 1,1(u)
Заметьте, что N 0,1(u) не равно нулю на [0,1) и [1,2), а N 1,1(u) не равно нулю на [1,2) и [2,3). Таким образом, имеем три случая:
N 0,2(u) = 0.5 u 2.
N 0,2(u) = (0.5 u)(2 - u) + 0.5(3 - u)(3 - u) = 0.5(-3 + 6 u - 2 u 2)
N 0,2(u) = 0.5(3 - u)(3 - u) = 0.5(3 - u)2
Если нарисовать отрезок кривой для каждого из трех случаев, то станет видно, что два смежных отрезка кривых соединяются, образуя кривую по узлам. Говоря точнее, отрезки первого и второго случаев соединяются при u = 1, а второго и третьего случаев - при u = 2. Это показано на рисунке ниже. Заметьте, что образованная кривая, изображенная на рисунке, является гладкой. Но в общем случае это не так, если, например, мы имеем дело с множественными узлами.
Дата добавления: 2015-10-29; просмотров: 193 | Нарушение авторских прав
<== предыдущая страница | | | следующая страница ==> |
B-spline: Мотивация | | | Два Важных Замечания |