B-сплайн

редактировать
Функция сплайна B-сплайн с контрольными точками / контрольным многоугольником и отмеченными кривыми компонентов

В математическое подполе численного анализа, B-сплайн или базисный сплайн - это сплайн функция, имеющая минимальное значение поддерживают в отношении заданной степени, гладкости и раздела домена. Любая сплайн-функция заданной степени может быть выражена как линейная комбинация B-сплайнов этой степени. Кардинальные B-шлицы имеют узлы, равноудаленные друг от друга. B-сплайны могут использоваться для аппроксимации кривой и численного дифференцирования экспериментальных данных.

В автоматизированном проектировании и компьютерной графике сплайн-функции строятся как линейные комбинации B-сплайнов с набором контрольных точек.

Содержание
  • 1 Введение
  • 2 Определение
  • 3 Свойства
    • 3.1 Кардинальный B-сплайн
    • 3.2 P-сплайн
  • 4 Производные выражения
  • 5 Моменты одномерных B-сплайнов
  • 6 Связь с кусочным / составным Безье
  • 7 Аппроксимация кривой
  • 8 Компьютерное проектирование и компьютерная графика
  • 9 NURBS
  • 10 См. Также
  • 11 Примечания
  • 12 Ссылки
  • 13 Дополнительная литература
  • 14 Внешние ссылки
Введение

Термин «B-сплайн» был придуман Исааком Якобом Шенбергом и является сокращением от слова «базис». сплайн. Сплайн-функция порядка n {\ displaystyle n}n - это кусочно полиномиальная функция степени n - 1 {\ displaystyle n- 1}n-1в переменной x {\ displaystyle x}x . Места, где встречаются части, называются узлами. Ключевым свойством сплайн-функций является то, что они и их производные могут быть непрерывными, в зависимости от кратности узлов.

B-сплайны порядка n {\ displaystyle n}n - это базисные функции для сплайн-функций того же порядка, определенных для одних и тех же узлов, что означает, что все возможные сплайн-функции могут быть построены из линейной комбинации B-сплайнов, и существует только одна уникальная комбинация для каждой сплайн-функции.

Определение
Кардинальный квадратичный B-сплайн с вектор узла (0, 0, 0, 1, 2, 3, 3, 3) и контрольные точки (0, 0, 1, 0, 0) и его первая производная Кардинальный кубический B-сплайн с вектором узла ( −2, −2, −2, −2, −1, 0, 1, 2, 2, 2, 2) и контрольные точки (0, 0, 0, 6, 0, 0, 0) и его первая производная Кардинальный B-сплайн четвертой степени с вектором узлов (0, 0, 0, 0, 0, 1, 2, 3, 4, 5, 5, 5, 5, 5) и контрольными точками (0, 0, 0, 0, 1, 0, 0, 0, 0) и его первая и вторая производные

Сплайн порядка n {\ displaystyle n}n представляет собой кусочно полином функция степени n - 1 {\ displaystyle n-1}n-1в переменной x {\ d isplaystyle x}x . Значения x {\ displaystyle x}x там, где встречаются части многочлена, называются узлами и обозначаются t 0, t 1, t 2,…, tn {\ displaystyle t_ { 0}, t_ {1}, t_ {2}, \ ldots, t_ {n}}{\displaystyle t_{0},t_{1},t_{2},\ldots,t_{n}}и отсортированы в порядке неубывания. Когда узлы различны, первые n - 2 {\ displaystyle n-2}n-2производные частей многочлена являются непрерывными для каждого узла. Когда r {\ displaystyle r}rузлы совпадают, тогда только первые n - r - 1 {\ displaystyle nr-1}{\displaystyle n-r-1}производные сплайна являются непрерывно через этот узел.

Для данной последовательности узлов существует, с точностью до коэффициента масштабирования, уникальный сплайн B i, n (x) {\ displaystyle B_ {i, n} (x)}{\ displaystyle B_ {i, n} (x)} удовлетворение

B i, n (x) = {0 ifx < t i o r x ≥ t i + n n o n z e r o o t h e r w i s e {\displaystyle B_{i,n}(x)=\left\{{\begin{array}{ll}0\mathrm {if} \quad x{\ displaystyle B_ {i, n} (x) = \ left \ {{\ begin {array} {ll} 0 \ mathrm {if} \ quad x <t_ {i} \ quad \ mathrm {или} \ quad x \ geq t_ {i + n} \\\ mathrm {ненулевое} \ mathrm {иначе} \ end {array}} \ right.}

Если мы добавим дополнительное ограничение, которое ∑ i B i, n (x) = 1 {\ displaystyle \ sum _ { i} B_ {i, n} (x) = 1}{\displaystyle \sum _{i}B_{i,n}(x)=1}для всех x {\ displaystyle x}x между первым и последним узлами, затем коэффициент масштабирования B i, n (x) {\ displaystyle B_ {i, n} (x)}{\ displaystyle B_ {i, n} (x)} становится фиксированным. Результирующие сплайновые функции B i, n (x) {\ displaystyle B_ {i, n} (x)}{\ displaystyle B_ {i, n} (x)} называются B-сплайнами.

В качестве альтернативы, B-сплайны могут быть определены путем построения с помощью формулы рекурсии Кокса – де Бора. Дана последовательность узлов …, t 0, t 1, t 2,… {\ displaystyle \ ldots, t_ {0}, t_ {1}, t_ {2}, \ ldots}{\ displaystyle \ ldots, t_ {0}, t_ {1}, t_ {2}, \ ldots} , тогда B-сплайны порядка 1 определяются как

B i, 1 (x): = {1 ifti ≤ x < t i + 1 0 o t h e r w i s e {\displaystyle B_{i,1}(x):=\left\{{\begin{matrix}1\mathrm {if} \quad t_{i}\leq xB_{i,1}(x):=\left\{{\begin{matrix}1\mathrm {if} \quad t_{i}\leq x<t_{i+1}\\0\mathrm {otherwise} \end{matrix}}\right.

Они удовлетворяют ∑ i B i, 1 (x) = 1 {\ displaystyle \ sum _ {i} B_ {i, 1} (x) = 1}{\displaystyle \sum _{i}B_{i,1}(x)=1}для всех x {\ displaystyle x}x , потому что для любого x {\ displaystyle x}x ровно один из B i, 1 (x) = 1 {\ displaystyle B_ {i, 1} (x) = 1}{\displaystyle B_{i,1}(x)=1}, и все другие равны нулю.

B-сплайны более высокого порядка определяются рекурсией

B i, k + 1 (x): = ω i, k (x) B i, k (x) + [1 - ω i + 1, К (Икс)] В я + 1, К (Икс), {\ Displaystyle В_ {я, к + 1} (х): = \ omega _ {я, к} (х) В_ {я, к } (x) + [1- \ omega _ {i + 1, k} (x)] B_ {i + 1, k} (x),}{\ displaystyle B_ {i, k + 1} (x): = \ omega _ {i, k} (x) B_ {i, k} (x) + [1- \ omega _ {i + 1, k} (x)] B_ {i + 1, k} (x),}

где

ω i, k (x): = {x - titi + k - ti, ti + k ≠ ti 0 в противном случае. {\ displaystyle \ omega _ {i, k} (x): = {\ begin {cases} {\ frac {x-t_ {i}} {t_ {i + k} -t_ {i}}}, t_ { i + k} \ neq t_ {i} \\ 0, {\ text {else}} \ end {cases}}.}{\displaystyle \omega _{i,k}(x):={\begin{cases}{\frac {x-t_{i}}{t_{i+k}-t_{i}}},t_{i+k}\neq t_{i}\\0,{\text{otherwise}}\end{cases}}.}
Свойства

Функция B-сплайна представляет собой комбинацию гибких полос который проходит через множество точек, называемых контрольными точками, и создает плавные кривые. Эти функции позволяют создавать сложные формы и поверхности и управлять ими с помощью ряда точек. B-сплайн и функции Безье широко применяются в методах оптимизации формы.

B-сплайн порядка n {\ displaystyle n}n - это кусочно-полиномиальная функция степени n - 1 {\ displaystyle n-1}n-1в переменной x {\ displaystyle x}x . Он определяется в 1 + n {\ displaystyle 1 + n}{\displaystyle 1+n}местоположениях tj {\ displaystyle t_ {j}}{\displaystyle t_{j}}, называемых узлами или точками останова, которые должны быть в порядке убывания tj ≤ tj + 1 {\ displaystyle t_ {j} \ leq t_ {j + 1}}{\ displaystyle t_ {j} \ leq t_ {j + 1}} . B-сплайн вносит вклад только в диапазоне между первым и последним из этих узлов и равен нулю в других местах. Если каждый узел разделен одинаковым расстоянием h {\ displaystyle h}h(где h = tj + 1 - tj {\ displaystyle h = t_ {j + 1} -t_ { j}}{\ displaystyle h = t_ {j + 1} -t_ {j}} ) от своего предшественника, узловой вектор и соответствующие B-сплайны называются «равномерными» (см. кардинальный B-сплайн ниже).

Для каждого конечного интервала узлов, где он не равен нулю, B-сплайн представляет собой полином степени n - 1 {\ displaystyle n-1}n-1. B-сплайн - это непрерывная функция в узлах. Когда все узлы, принадлежащие B-сплайну, различны, его производные также непрерывны до производной степени n - 2 {\ displaystyle n-2}n-2. Если узлы совпадают при заданном значении x {\ displaystyle x}x , непрерывность производного порядка уменьшается на 1 для каждого дополнительного совпадающего узла. B-сплайны могут иметь общие подмножества своих узлов, но два B-сплайна, определенные над одними и теми же узлами, идентичны. Другими словами, B-сплайн однозначно определяется своими узлами.

Различают внутренние узлы и конечные точки. Внутренние узлы покрывают x {\ displaystyle x}x -домен, который интересует. Поскольку один B-сплайн уже простирается на 1 + n {\ displaystyle 1 + n}{\displaystyle 1+n}узлов, из этого следует, что внутренние узлы необходимо удлинить с помощью n - 1 {\ displaystyle n-1}n-1конечных точек с каждой стороны, чтобы обеспечить полную поддержку первой и последний B-шлиц, влияющий на внутренние интервалы узлов. Значения конечных точек не имеют значения, обычно первый или последний внутренний узел просто повторяется.

Полезность B-сплайнов заключается в том, что любую сплайн-функцию порядка n {\ displaystyle n}n на данном наборе узлов можно выразить как линейную комбинацию B-шлицев:

S n, t (x) = ∑ i α i B i, n (x). {\ displaystyle S_ {n, \ mathbf {t}} (x) = \ sum _ {i} \ alpha _ {i} B_ {i, n} (x).}{\ displaystyle S_ {n, \ mathbf {t}} (x) = \ sum _ {i} \ alpha _ {i} B_ {i, n} (x).}

B-шлицы играют роль базисные функции для пространства сплайн-функций, отсюда и название. Это свойство следует из того факта, что все части имеют одинаковые свойства непрерывности в пределах их индивидуального диапазона поддержки в узлах.

Выражения для полиномиальных частей могут быть получены с помощью рекурсивной формулы Кокса – де Бура.

B i, 0 (x): = {1 ifti ≤ x < t i + 1 0 o t h e r w i s e {\displaystyle B_{i,0}(x):=\left\{{\begin{matrix}1\mathrm {if} \quad t_{i}\leq x{\ displaystyle B_ {i, 0} (x): = \ left \ {{\ begin {matrix} 1 \ mathrm {if} \ quad t_ {i} \ leq x <t_ {i + 1} \\ 0 \ mathrm {иначе} \ end {matrix}} \ right.}
B i, k (x): = x - titi + k - ti B i, k - 1 (x) + ti + k + 1 - xti + k + 1 - ti + 1 B i + 1, k - 1 (x). {\ Displaystyle В_ {я, к} (х): = {\ гидроразрыва {х-т_ {я}} {т_ {я + к} -t_ {я}}} В_ {я, к-1} (х) + {\ frac {t_ {i + k + 1} -x} {t_ {i + k + 1} -t_ {i + 1}}} B_ {i + 1, k-1} (x).}{\ displaystyle B_ {i, k} (x) : = {\ frac {x-t_ {i}} {t_ {i + k} -t_ {i}}} B_ {i, k-1} (x) + {\ frac {t_ {i + k + 1 } -x} {t_ {i + k + 1} -t_ {i + 1}}} B_ {i + 1, k-1} (x).}

То есть B j, 0 (x) {\ displaystyle B_ {j, 0} (x)}{\ displaystyle B_ {j, 0} (x)} является кусочно-постоянным единицей или нулем, указывающим, в каком промежутке узла x находится (ноль, если узел j повторяется). Уравнение рекурсии состоит из двух частей:

x - titi + k - ti {\ displaystyle {\ frac {x-t_ {i}} {t_ {i + k} -t_ {i}}}}{\displaystyle {\frac {x-t_{i}}{t_{i+k}-t_{i}}}}

изменяется от нуля до единицы при изменении x от ti {\ displaystyle t_ {i}}t_{i}до ti + k {\ displaystyle t_ {i + k}}t_ {i + k} и

ti + k + 1 - xti + k + 1 - ti + 1 {\ displaystyle {\ frac {t_ {i + k + 1} -x} {t_ {i + k + 1} -t_ {i +1}}}}{ \ Displaystyle {\ гидроразрыва {t_ {я + к + 1} -x} {t_ {я + к + 1} -t_ {я + 1}}}}

изменяется от единицы до нуля при изменении x от ti + 1 {\ displaystyle t_ {i + 1}}t_{i+1}до ti + k + 1 { \ Displaystyle t_ {я + к + 1}}{\ displaystyle t_ {i + к + 1}} . Соответствующие B равны нулю вне этих соответствующих диапазонов. Например, B i, 1 (x) {\ displaystyle B_ {i, 1} (x)}{\ displaystyle B_ {я, 1} (х)} - это треугольная функция, которая равна нулю ниже x = ti {\ displaystyle x = t_ {i}}x = t_ {i } , переход к единице при x = ti + 1 {\ displaystyle x = t_ {i + 1}}x=t_{i+1}и обратно к нулю в и далее x = ti + 2 {\ displaystyle x = t_ {i + 2}}x=t_{i+2}. Однако, поскольку базисные функции B-сплайна имеют локальную поддержку , B-сплайны обычно вычисляются алгоритмами, которым не нужно оценивать базисные функции, где они равны нулю, например, алгоритм де Бура.

Это соотношение ведет непосредственно к алгоритму BSPLV, закодированному на FORTRAN, который генерирует значения B-сплайнов порядка n в точке x. На следующей схеме показано, как каждая часть порядка n представляет собой линейную комбинацию частей B-сплайнов порядка n-1 слева от нее.

0 0 0 B i - 2, 2 B i - 1, 1 B i, 0 B i - 1, 2 B i, 1 0 B i, 2 0 0 {\ displaystyle {\ begin {matrix} 0 \ \ 0 \\ 0 B_ {i-2,2} \\ B_ {i-1,1} \\ B_ {i, 0} B_ {i-1,2} \\ B_ {i, 1} \\ 0 B_ {i, 2} \\ 0 \\ 0 \\\ end {matrix}}}{\displaystyle {\begin{matrix}0\\0\\0B_{i-2,2}\\B_{i-1,1}\\B_{i,0}B_{i-1,2}\\B_{i,1}\\0B_{i,2}\\0\\0\\\end{matrix}}}

Применение формулы рекурсии с узлами в (0, 1, 2, 3) {\ displaystyle (0, 1,2,3)}{\ displaystyle (0,1,2, 3)} дает части однородного B-сплайна порядка 3

B 1 = x 2/2 0 ≤ x < 1 {\displaystyle B_{1}=x^{2}/2\qquad 0\leq x<1}{\displaystyle B_{1}=x^{2}/2\qquad 0\leq x<1}
B 2 = (- 2 x 2 + 6 x - 3) / 2 1 ≤ x < 2 {\displaystyle B_{2}=(-2x^{2}+6x-3)/2\qquad 1\leq x<2}{\displaystyle B_{2}=(-2x^{2}+6x-3)/2\qquad 1\leq x<2}
B 3 = (3 - x) 2/2 2 ≤ x < 3 {\displaystyle B_{3}=(3-x)^{2}/2\qquad 2\leq x<3}{\displaystyle B_{3}=(3-x)^{2}/2\qquad 2\leq x<3}

Эти части показаны на диаграмме. Свойство непрерывности квадратичной сплайн-функции и ее первой производной во внутренних узлах проиллюстрировано следующим образом

При x = 1, B 1 = B 2 = 0,5; d B 1 dx = d B 2 dx = 1 {\ displaystyle {\ t_dv {At}} x = 1, B_ {1} = B_ {2} = 0,5; {\ frac {dB_ {1}} {dx}} = {\ frac {dB_ {2}} {dx}} = 1}{\displaystyle {\t_dv{At }}x=1,B_{1}=B_{2}=0.5;{\frac {dB_{1}}{dx}}={\frac {dB_{2}}{dx}}=1}
При x = 2, B 2 = B 3 = 0,5; d B 2 dx = d B 3 dx = - 1 {\ displaystyle {\ t_dv {At}} x = 2, B_ {2} = B_ {3} = 0,5; {\ frac {dB_ {2}} {dx} } = {\ frac {dB_ {3}} {dx}} = - 1}{\displaystyle {\t_dv{At }}x=2,B_{2}=B_{3}=0.5;{\frac {dB_{2}}{dx}}={\frac {dB_{3}}{dx}}=-1}

Вторая производная B-сплайна степени 2 разрывна в узлах:

d 2 B 1 dx 2 = 1, d 2 B 2 dx 2 = - 2, d 2 B 3 dx 2 = - 1. {\ displaystyle {\ frac {d ^ {2} B_ {1}} {dx ^ {2}}} = 1, { \ frac {d ^ {2} B_ {2}} {dx ^ {2}}} = - 2, {\ frac {d ^ {2} B_ {3}} {dx ^ {2}}} = - 1.}{\displaystyle {\frac {d^{2}B_{1}}{dx^{2}}}=1,{\frac {d^{2}B_{2}}{dx^{2}}}=-2,{\frac {d^{2}B_{3}}{dx^{2}}}=-1.}

Были предложены более быстрые варианты алгоритма де Бура, но они страдают сравнительно меньшей стабильностью.

Кардинальный B-сплайн

Кардинальный B-сплайн имеет постоянное разделение, h, между узлами. Кардинальные B-сплайны для данного порядка n - это просто сдвинутые копии друг друга. Их можно получить из более простого определения.

B i, n, t (x) = x - tihn [0,…, n] (⋅ - ti) + n - 1 {\ displaystyle B_ {i, n, t} (x) = {\ frac {x-t_ {i}} {h}} n [0, \ dots, n] (\ cdot -t_ {i}) _ {+} ^ {n-1}}{\displaystyle B_{i,n,t}(x)={\frac {x-t_{i}}{h}}n[0,\dots,n](\cdot -t_{i})_{+}^{n-1}}

Обозначение «заполнитель» используется для обозначения того, что n-я разделенная разность функции (t - x) + n - 1 {\ displaystyle (tx) _ {+} ^ { n-1}}(tx)_{+}^{n-1}из двух переменных t и x следует взять, зафиксировав x и учитывая (t - x) + n - 1 {\ displaystyle (tx) _ {+} ^ {n-1}}(tx)_{+}^{n-1}как функция только от t.

Кардинальный B-сплайн имеет равномерно распределенные узлы, поэтому интерполяция между узлами равняется свертке со сглаживающим ядром.

Пример, если мы хотим интерполировать три значения между узлами B-сплайна (b {\ displaystyle {\ textbf {b}}}{\ textbf {b}} ), мы можем записать сигнал как:

x = [b 1, 0, 0, b 2, 0, 0, b 3, 0, 0,...., bn, 0, 0] {\ displaystyle {\ textbf {x}} = [{\ textbf {b}} _ {1}, 0,0, {\ textbf {b}} _ {2}, 0,0, {\ textbf {b}} _ {3}, 0,0,...., {\ textbf {b}} _ {n}, 0,0]}{\textbf {x}}=[{\textbf {b}}_{1},0,0,{\textbf {b}}_{2},0,0,{\textbf {b}}_{3},0,0,....,{\textbf {b}}_{n},0,0]

Свертка сигнала x {\ displaystyle {\ textbf {x}}}{\textbf {x}}с функцией прямоугольника h = [1/3, 1/3, 1/3] {\ displaystyle {\ textbf {h}} = [1 / 3,1 / 3,1 / 3]}{\ textbf {h}} = [1 / 3,1 / 3,1 / 3] дает интерполированные значения b-сплайна первого порядка. B-сплайновая интерполяция второго порядка - это свертка с функцией прямоугольника дважды y = x ∗ h ∗ h {\ displaystyle {\ textbf {y}} = {\ textbf {x}} * {\ textbf {h}} * {\ textbf {h}}}{\textbf {y}}={\textbf {x}}*{\textbf {h}}*{\textbf {h}}, путем итеративной фильтрации с помощью прямоугольной функции получается интерполяция более высокого порядка.

Быстрая интерполяция b-сплайном на однородной области выборки может быть выполнена с помощью итеративной фильтрации среднего значения. В качестве альтернативы функция прямоугольника равна Sinc в области Фурье. Следовательно, интерполяция кубическим сплайном равняется умножению сигнала в области Фурье на Sinc ^ 4.

См. Распределение Ирвина – Холла # Особые случаи для алгебраических выражений для кардинальных B-сплайнов степени 1-4.

P-сплайн

Термин P-spline означает «B-сплайн с ограничениями». Это относится к использованию B-сплайнового представления, в котором коэффициенты определяются частично данными, которые должны быть подобраны, а частично дополнительной функцией штрафа , которая направлена ​​на обеспечение гладкости, чтобы избежать переобучения.

Дву- и многомерные P-сплайновые аппроксимации данных могут использовать произведение граней матриц для минимизации вычислительных операций.

Производная выражения

Производная B-сплайна степени k является просто функцией B-сплайнов степени k-1.

d B i, k (x) dx = k (B i, k - 1 (Икс) Ти + К - Ти - В я + 1, К - 1 (Икс) Ти + К + 1 - Ти + 1) {\ Displaystyle {\ гидроразрыва {дБ_ {я, к} (х)} { dx}} = k \ left ({\ frac {B_ {i, k-1} (x)} {t_ {i + k} -t_ {i}}} - {\ frac {B_ {i + 1, k -1} (x)} {t_ {i + k + 1} -t_ {i + 1}}} \ right)}{\displaystyle {\frac {dB_{i,k}(x)}{dx}}=k\left({\frac {B_{i,k-1}(x)}{t_{i+k}-t_{i}}}-{\frac {B_{i+1,k-1}( x)}{t_{i+k+1}-t_{i+1}}}\right)}

Отсюда следует, что

ddx ∑ i α i B i, k = ∑ i = r - k + 2 s - 1 k α i - α i - 1 ti + k - ti B i, k - 1 на [tr. ts] {\ displaystyle {\ frac {d} {dx}} \ sum _ {i} \ alpha _ {i} B_ {i, k} = \ sum _ {i = r-k + 2} ^ {s- 1} k {\ frac {\ alpha _ {i} - \ alpha _ {i-1}} {t_ {i + k} -t_ {i}}} B_ {i, k-1} \ on [t_ { r}.t_ {s}]}{\ displaystyle {\ frac {d} {dx}} \ sum _ {i} \ alpha _ {i} B_ {i, k} = \ sum _ {i = r-k + 2} ^ {s-1} k {\ frac {\ alpha _ {i} - \ alpha _ {i-1}} {t_ {i + k} - t_ {i}}} B_ {i, k-1} \ на [t_ {r}.t_ {s}]}

который показывает, что существует простая взаимосвязь между производной сплайновой функции и B-сплайнами степени на единицу меньше.

Моменты одномерных B-сплайнов

Одномерные B-сплайны, т. Е. B-сплайны, где положения узлов лежат в одном измерении, могут использоваться для представления одномерных функций плотности вероятности п (Икс) {\ Displaystyle р (х)}p (x) . Примером является взвешенная сумма i {\ displaystyle i}i базисных функций B-сплайна порядка n {\ displaystyle n}n , каждая из которых является областью- нормализовано к единице (т. е. не оценивается напрямую с помощью стандартного алгоритма де-Бура)

p (x) = ∑ ici ⋅ B i, n, norm (x) {\ displaystyle p (x) = \ sum _ {i} c_ {i} \ cdot B_ {i, n, {\ textbf {norm}}} (x)}{\displaystyle p(x)=\sum _{i}c_{i}\cdot B_{i,n,{\textbf {norm}}}(x)}

и с ограничением константы нормализации ∑ ici = 1 {\ displaystyle \ sum _ {i} c_ { i} = 1}{\ displaystyle \ sum _ {i} c_ {i} = 1} . K-й необработанный момент μ k {\ displaystyle \ mu _ {k}}\ mu _ {k} нормализованного B-сплайна B i, n, norm {\ displaystyle B_ {i, n, {\ textbf {norm}}}}{\ displaystyle B_ {i, n, {\ textbf {norm}}}} можно записать как среднее значение Дирихле Карлсона R k {\ displaystyle R_ {k}}R_{k}, которое, в свою очередь, может быть решено точно с помощью контурного интеграла и итерационной суммы как

μ k = R k (m; t) = ∫ - ∞ ∞ xk ⋅ B i, n, norm (x | t 1… tj) dx = Γ (k + 1) Γ (м) Γ (м + К) ⋅ D К (м, t) {\ displaystyle \ mu _ {k} = R_ {k} (\ mathbf {m}; \ mathbf {t}) = \ int _ {- \ infty} ^ {\ infty} x ^ {k} \ cdot B_ {i, n, {\ textbf {norm}}} (x | t_ {1} \ dots t_ {j}) dx = {\ frac {\ Gamma (k + 1) \ Gamma (m)} {\ Gamma (m + k)}} \ cdot D_ {k} (\ mathbf {m}, \ mathbf {t})}{\displaystyle \mu _{k}=R_{k}(\mathbf {m} ;\mathbf {t})=\int _{-\infty }^{\infty }x^{k}\cdot B_{i,n,{\textbf {norm}}}(x|t_{1}\dots t_{j})dx={\frac {\Gamma (k+1)\Gamma (m)}{\Gamma (m+k)}}\cdot D_{k}(\mathbf {m},\mathbf {t})}

с

D К знак равно 1 К ∑ U знак равно 1 К [(∑ я = 1 jmi ⋅ tiu) D k - u] {\ displaystyle D_ {k} = {\ frac {1} {k}} \ sum \ limits _ { u = 1} ^ {k} \ left [\ left (\ sum \ limits _ {i = 1} ^ {j} m_ {i} \ cdot {t_ {i}} ^ {u} \ right) D_ {ку } \ right]}{\displaystyle D_{k}={\frac {1}{k}}\sum \limits _{u=1}^{k}\left[\left(\sum \limits _{i=1}^{j}m_{i}\cdot {t_{i}}^{u}\right)D_{k-u}\right]}

и D 0 = 1 {\ displaystyle D_ {0} = 1}{\displaystyle D_{0}=1}. Здесь t {\ displaystyle \ mathbf {t}}\mathbf {t} представляет вектор с j {\ displaystyle j}jположениями узлов и m {\ displaystyle \ mathbf {m}}{\ mathbf {m}} вектор с соответствующими кратностями узлов. Следовательно, можно точно вычислить любой момент функции плотности вероятности p (x) {\ displaystyle p (x)}p (x) , представленной суммой базисных функций B-сплайна, не прибегая к численным методам.

Связь с кусочно-составной кривой Безье

A Кривая Безье также является полиномиальной кривой, определяемой с использованием рекурсии из кривых более низкой степени того же класса и закодированной в терминах контрольных точек, но ключевое отличие заключается в что все термины в рекурсии для сегмента кривой Безье имеют одну и ту же область определения (обычно [0, 1] {\ displaystyle [0,1]}[0,1]), тогда как поддерживает двух членов в B-сплайн-рекурсии различны (крайние подынтервалы не являются общими). Это означает, что кривая Безье степени n {\ displaystyle n}n , заданная как m ≫ n {\ displaystyle m \ gg n}{\ displaystyle m \ gg n} , контрольные точки состоят примерно из m / n {\ displaystyle m / n}m/nв основном независимые сегменты, тогда как B-сплайн с теми же параметрами плавно переходит от подынтервала к подинтервалу. Чтобы получить что-то сопоставимое с кривой Безье, нужно наложить условие гладкости на переходы между сегментами, что приведет к некоторому виду сплайна Безье (для которого многие контрольные точки будут определяться требованием гладкости).

A кусочно / составная кривая Безье представляет собой серию кривых Безье, соединенных по крайней мере с непрерывностью C0 (последняя точка одной кривой совпадает с начальной точкой следующей кривой). В зависимости от приложения могут быть добавлены дополнительные требования к гладкости (например, непрерывность C1 или C2). Непрерывные кривые C1 имеют идентичные касательные в точке излома (где встречаются две кривые). Непрерывные кривые C2 имеют одинаковую кривизну в точке излома.

Чтобы получить непрерывность C2, кривая Безье теряет локальный контроль, потому что для обеспечения непрерывности C2 контрольные точки зависят друг от друга. Если перемещается одна контрольная точка, необходимо повторно оценить весь сплайн. B-сплайны имеют как непрерывность C2, так и локальное управление, но они теряют свойство интерполяции кусочного Безье.

Подгонка кривой

Обычно в подгонке кривой, набор точки данных соответствуют кривой, определяемой некоторой математической функцией. Например, обычные типы аппроксимации кривой используют полином или набор экспоненциальных функций. Когда нет теоретической основы для выбора функции аппроксимации, кривая может быть аппроксимирована сплайновой функцией, составленной из суммы B-сплайнов, с использованием метода наименьших квадратов. Таким образом, целевая функция минимизации методом наименьших квадратов для сплайновой функции степени k:

U = ∑ allx {W (x) [y (x) - ∑ i α i B i, к, t (x)]} 2 {\ displaystyle U = \ sum _ {\ mathrm {all} \, x} \ left \ {W (x) \ left [y (x) - \ sum _ {i} \ alpha _ {i} B_ {i, k, t} (x) \ right] \ right \} ^ {2}}{\ displaystyle U = \ sum _ {\ mathrm {all} \, x} \ left \ {W (x) \ left [y (x) - \ sum _ {i} \ alpha _ {i} B_ {i, k, t} (x) \ right] \ right \} ^ {2}}

W (x) - это вес, а y (x) - это значение в точке x. Коэффициенты α i {\ displaystyle \ alpha _ {i}}\alpha _{i}- это параметры, которые необходимо определить. Значения узлов могут быть фиксированными или их также можно рассматривать как параметры.

Основная трудность при применении этого процесса заключается в определении количества используемых узлов и их расположения. де Бур предлагает различные стратегии решения этой проблемы. Например, расстояние между узлами уменьшается пропорционально кривизне (2-я производная) данных. Было опубликовано несколько приложений. Например, было исследовано использование B-сплайнов для аппроксимации одиночных кривых лоренцевой и гауссовой кривых. Рассчитаны оптимальные сплайн-функции степеней 3-7 включительно, основанные на симметричном расположении узлов 5, 6 и 7 узлов, и метод применен для сглаживания и дифференцирования спектроскопических кривых. В сопоставимом исследовании двумерная версия фильтрации Савицкого-Голея и сплайн-метода дали лучшие результаты, чем скользящее среднее или фильтрация Чебышева.

. дизайн и компьютерная графика

В приложениях автоматизированного проектирования и компьютерной графики сплайн-кривая иногда представляется как C (t) {\ displaystyle C (t)}C(t), параметрическая кривая некоторого реального параметра t {\ displaystyle t}t. В этом случае кривая C (t) {\ displaystyle C (t)}C(t)может рассматриваться как две или три отдельные координатные функции (x (t), y (t)) {\ Displaystyle (х (т), у (т))}(x(t),y(t))или (х (т), у (т), г (т)) {\ Displaystyle (х (т), y (t), z (t))}{\ displaystyle (x (t), y (t), z (t))} . Координатные функции x (t) {\ displaystyle x (t)}x(t), y (t) {\ displaystyle y (t)}y(t)и z (t) {\ displaystyle z (t)}z (t) - каждая сплайн-функция с общим набором узловых значений t 1, t 2,…, tn {\ displaystyle t_ {1}, t_ {2}, \ ldots, t_ {n}}{\displaystyle t_{1},t_{2},\ldots,t_{n}}.

Поскольку B-сплайны образуют базисные функции, каждая из координатных функций может быть выражена как линейная сумма B-сплайнов, поэтому мы имеем

X (t) = ∑ ixi B i, n (t), Y (t) = ∑ iyi B i, n (t), Z (t) = ∑ izi B i, n (t). {\ Displaystyle {\ begin {выровнено} X (t) = \ sum _ {i} x_ {i} B_ {i, n} (t), \\ Y (t) = \ sum _ {i} y_ {i} B_ {i, n} (t), \\ Z (t) = \ sum _ {i} z_ {i} B_ {i, n} (t). \ end {align}}}{\ displaystyle {\ begin {align} X (t) = \ sum _ {i} x_ {i} B_ {i, n} (t), \\ Y (t) = \ sum _ {i} y_ {i} B_ {i, n} (t), \\ Z (t) = \ sum _ {i } z_ {i} B_ {i, n} (t). \ end {align}}}

Веса xi {\ displaystyle x_ {i}}x_{i}, yi {\ displaystyle y_ {i}}y_ {i} и zi {\ displaystyle z_ {i}}z_{i}можно объединить в точки P i = (xi, yi, zi) {\ displaystyle P_ {i} = (x_ {i}, y_ {i}, z_ {i})}{\displaystyle P_{i}=(x_{i},y_{i},z_{i})}в 3-м пространстве. Эти точки P i {\ displaystyle P_ {i}}P_{i}обычно известны как контрольные точки.

Работая в обратном порядке, последовательность контрольных точек, значений узлов и порядка B-сплайна определяет параметрическую кривую. Это представление кривой с помощью контрольных точек имеет несколько полезных свойств:

  1. Контрольные точки P i {\ displaystyle P_ {i}}P_{i}определяют кривую. Если все контрольные точки каким-либо образом трансформируются вместе, например, перемещаются, вращаются, масштабируются или перемещаются с помощью любого аффинного преобразования, тогда соответствующая кривая трансформируется таким же образом.
  2. Поскольку B-сплайны отличны от нуля только для конечного числа узловых интервалов, если одна контрольная точка перемещается, соответствующее изменение параметрической кривой находится чуть выше диапазона параметров небольшого числа узловых интервалов.
  3. Потому что ∑ я B i, n (x) = 1 {\ displaystyle \ sum _ {i} B_ {i, n} (x) = 1}{\displaystyle \sum _{i}B_{i,n}(x)=1}, и всегда каждый B i, n (x) ≥ 0 {\ displaystyle B_ {i, n} (x) \ geq 0}{\displaystyle B_{i,n}(x)\geq 0}, тогда кривая остается внутри ограничивающей рамки контрольных точек. Кроме того, в некотором смысле кривая в целом следует за контрольными точками.

Менее желательной особенностью является то, что параметрическая кривая не интерполирует контрольные точки. Обычно кривая не проходит через контрольные точки.

NURBS
NURBS-кривая - полиномиальная кривая, определенная в однородных координатах (синий) и ее проекция на плоскость - рациональная кривая (красный)

В автоматизированном проектировании, автоматизированное производство и компьютерная графика, мощным расширением B-сплайнов являются неоднородные рациональные B-сплайны (NURBS). NURBS - это, по сути, B-сплайны в однородных координатах. Как и B-сплайны, они определяются своим порядком, вектором узла и набором контрольных точек, но, в отличие от простых B-сплайнов, каждая контрольная точка имеет вес. Когда вес равен 1, NURBS представляет собой просто B-сплайн, и, как таковой, NURBS обобщает как B-сплайны, так и кривые Безье и поверхности, основное различие заключается во взвешивании контрольных точек, что делает NURBS кривые "рациональные".

Surface Modelling.svg

Оценивая NURBS при различных значениях параметров, кривую можно проследить в пространстве; аналогично, оценивая NURBS-поверхность при различных значениях двух параметров, поверхность может быть представлена ​​в декартовом пространстве.

Подобно B-сплайнам, контрольные точки NURBS определяют форму кривой. Каждая точка кривой вычисляется путем взвешивания суммы нескольких контрольных точек. Вес каждой точки зависит от управляющего параметра. Для кривой степени d влияние любой контрольной точки ненулевое только в d + 1 интервалах (узлах) пространства параметров. В пределах этих интервалов вес изменяется в соответствии с полиномиальной функцией (базисными функциями) степени d. На границах интервалов базисные функции плавно уходят в нуль, причем гладкость определяется степенью полинома.

Узловой вектор - это последовательность значений параметров, которая определяет, где и как контрольные точки влияют на кривую NURBS. Количество узлов всегда равно количеству контрольных точек плюс градус кривой плюс один. Каждый раз, когда значение параметра входит в новый диапазон узлов, новая контрольная точка становится активной, а старая контрольная точка отбрасывается.

NURBS-кривая имеет следующий вид:

C (u) = ∑ i = 1 k N i, nwi P i ∑ i = 1 k N i, nwi {\ displaystyle C (u) = {\ frac {\ sum _ {i = 1} ^ {k} {N_ {i, n} w_ {i} P} _ {i}} {\ sum _ {i = 1} ^ {k} {N_ { i, n} w_ {i}}}}}C(u)={\frac {\sum _{i=1}^{k}{N_{i,n}w_{i}P}_{i}}{\sum _{i=1}^{k}{N_{i,n}w_{i}}}}

Здесь обозначения следующие. u - независимая переменная (вместо x), k - количество контрольных точек, N - это B-сплайн (используется вместо B), n - степень полинома, P - контрольная точка, а w - вес. Знаменатель - это нормализующий коэффициент, который дает единицу, если все веса равны единице.

Обычно это пишут как

C (u) = ∑ i = 1 k R i, n (u) P i {\ displaystyle C (u) = \ sum _ {i = 1 } ^ {k} R_ {i, n} (u) P_ {i}}C(u)=\sum _{i=1}^{k}R_{i,n}(u)P_{i}

, в котором функции

R i, n (u) = N i, n (u) wi ∑ j = 1 k N J, N (U) WJ {\ Displaystyle R_ {I, N} (U) = {N_ {I, N} (U) W_ {I} \ over \ sum _ {j = 1} ^ {k} N_ {j, n} (u) w_ {j}}}R_ {i, n} (u) = {N_ {i, n} (u) w_ {i} \ over \ sum _ {j = 1} ^ {k } N_ {j, n} (u) w_ {j}}

известны как рациональные базисные функции.

NURBS-поверхность получается как тензорное произведение двух NURBS-кривых с использованием двух независимых параметров u и v (с индексами i и j соответственно):

S (u, v) знак равно ∑ я знак равно 1 К ∑ J знак равно 1 l р я, j (u, v) п я, j {\ displaystyle S (u, v) = \ sum _ {i = 1} ^ {k} \ sum _ {j = 1} ^ {l} R_ {i, j} (u, v) P_ {i, j}}S(u,v)=\sum _{i=1}^{k}\sum _{j=1}^{l}R_{i,j}(u,v)P_{i,j}

с

R i, j (u, v) = N i, n ( u) N j, m (v) wi, j ∑ p = 1 К ∑ q = 1 l N p, n (u) N q, m (v) wp, q {\ displaystyle R_ {i, j} (u, v) = {\ frac {N_ {i, n} (u) N_ {j, m} (v) w_ {i, j}} {\ sum _ {p = 1} ^ {k} \ sum _ { q = 1} ^ {l} N_ {p, n} (u) N_ {q, m} (v) w_ {p, q}}}}R_{i,j}(u,v)={\frac {N_{i,n}(u)N_{j,m}(v)w_{i,j}}{\sum _{p=1}^{k}\sum _{q=1}^{l}N_{p,n}(u)N_{q,m}(v)w_{p,q}}}

как рациональные базисные функции.

См. Также
Примечания
Ссылки

Цитированные работы

  • Карл де Бур (1978). Практическое руководство по сплайнам. Springer-Verlag. ISBN 978-3-540-90356-7.
  • Пигль, Лес; Тиллер, Уэйн (1997). Книга NURBS (2-е изд.). Springer. ISBN 978-3-540-61545-3.
Дополнительная литература
  • Ричард Х. Бартельс; Джон С. Битти; Брайан А. Барский (1987). Введение в сплайны для использования в компьютерной графике и геометрическом моделировании. Морган Кауфманн. ISBN 978-1-55860-400-1.
  • Жан Галлье (1999). Кривые и поверхности в геометрическом моделировании: теория и алгоритмы. Морган Кауфманн. Глава 6. Кривые B-сплайна. Эта книга больше не издается и находится в свободном доступе у автора.
  • Хартмут Праутч; Вольфганг Бём; Марко Палушны (2002). Безье и методы B-сплайна. Springer Science Business Media. ISBN 978-3-540-43761-1.
  • Дэвид Саломон (2006). Кривые и поверхности для компьютерной графики. Springer. Глава 7. B-сплайновая аппроксимация. ISBN 978-0-387-28452-1.
Внешние ссылки
Последняя правка сделана 2021-05-11 14:23:41
Содержание доступно по лицензии CC BY-SA 3.0 (если не указано иное).
Обратная связь: support@alphapedia.ru
Соглашение
О проекте