B-сплайн

Матеріал з Вікіпедії — вільної енциклопедії.
Перейти до: навігація, пошук

B-сплайнсплайн-функція, що має мінімальний носій для заданого степеня, гладкості та області визначення.

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

Термін B-сплайн запровадив Ісак Яков Шонберг. B-сплайни є узагальненням кривих Без'є, вони допомогають уникнути феномену Рунге при високих степенях полінома.

Визначення[ред.ред. код]

B-сплайн степеня n з заданими вузлами:

 t_0 \le t_1 \le \cdots \le t_m

та (m−n) контрольними точками

\mathbf{P}_{0} \ldots \mathbf{P}_{m-n-1}

це параметрична крива, що складена з базисних B-сплайнів степеня n

\mathbf{S}(t)= \sum_{i=0}^{m-n-1} \mathbf{P}_{i} b_{i,n}(t), \qquad t \in [t_n,t_{m-n}].

Базисні B-сплайни визначаються рекурсивними формулами:

b_{j,0}(t) := 1_{[t_j,t_{j+1})} =
\begin{cases} 
1, & \quad t \in [t_j, t_{j+1}) \\
0, & \quad t \notin [t_j, t_{j+1}) 
\end{cases}.
b_{j,n}(t) := \frac{t - t_j}{t_{j+n} - t_j} b_{j,n-1}(t) + \frac{t_{j+n+1} - t}{t_{j+n+1} - t_{j+1}} b_{j+1,n-1}(t) \; \quad >0 при  t \in [t_{j}, \; t_{j+n+1}).

При однаковій відстані між сусідніми вузлами B-сплайни називаються однорідними, в протилежному випадку — неоднорідними.

Однорідні B-сплайни[ред.ред. код]

Для однорідних B-сплайнів, базисні B-сплайни однакового степеня є зміщеними екземплярами однієї функції. Нерекурсивним визначенням базисних B-сплайнів є

b_{j,n}(t) = b_n(t - t_j), \qquad\; j = \overline{0, m-n-1},

де

b_{n}(t) := \frac{n+1}{n} \sum_{i=0}^{n+1} \omega_{i,n}(t - t_i)_+^{n}, \qquad \omega_{i,n} := \prod_{j=0, j \neq i}^{n+1} \frac{1}{t_j - t_i}.

Кардинальні B-сплайни[ред.ред. код]

Визначимо B0 як індикаторну функцію відрізку [-\tfrac{1}{2}, \tfrac{1}{2}] і Bk рекурсивно через згортку

B_k(t) := B_0(t) * B_{k-1}(t)  = \int_\R B_0(t-\tau)B_{k-1}(\tau)\, d\tau = \int_{t-\tfrac{1}{2}}^{t+\tfrac{1}{2}} B_{k-1}(\tau)\, d\tau, \quad k \in \N

Bk має носій [-\tfrac{k+1}{2}, \tfrac{k+1}{2}].

Приклади[ред.ред. код]

Константні B-сплайни[ред.ред. код]

Це найпростіші сплайни. Вони не є навіть неперервними.

b_{j,0}(t) = 1_{[t_j,t_{j+1})} \qquad B_0(t) = 1_{[-\tfrac{1}{2}, \tfrac{1}{2})}.

Лінійні B-spline[ред.ред. код]

Лінійні B-сплайни є неперервними, але не диференційовними.

b_{j,1}(t) = \begin{cases} 
\frac{t - t_j}{t_{j+1} - t_j}, & \quad t \in [t_j, \; t_{j+1}) \\
\frac{t_{j+2} - t}{t_{j+2} - t_{j+1}}, & \quad t \in [t_{j+1}, \; t_{j+2})
\end{cases}
\qquad B_1(t) = \begin{cases} 
t + 1, & t \in [-1, \; 0) \\
1 - t, & t \in [0, \; +1)
\end{cases}

Однорідні квадратичні B-сплайни[ред.ред. код]

Є найбільш вживаною формою B-сплайнів.

b_2(t) = b_{j,2}(t) = \begin{cases}
\frac{1}{2}(t-t_j)^2, & t \in [t_j, \; t_{j+1}) \\
-(t-t_{j+1})^2 + (t-t_{j+1}) + \frac{1}{2}, & t \in [t_{j+1}, \; t_{j+2}) \\
\frac{1}{2}(1-(t-t_{j+2}))^2, & t \in [t_{j+2}, \; t_{j+3})
\end{cases}
\qquad B_2(t) = \begin{cases}
\frac{1}{2}(t + \frac{3}{2})^2, & t \in [-\frac{3}{2}, \; -\frac{1}{2}) \\
\frac{3}{4}-t^2, & t \in [-\frac{1}{2}, \; +\frac{1}{2}) \\
\frac{1}{2}(t - \frac{3}{2})^2, & t \in [\frac{1}{2}, \; \frac{3}{2})
\end{cases}

В матричній формі:

 \mathbf{S}_i(t) = \begin{bmatrix} t^2 & t & 1 \end{bmatrix} \frac{1}{2}
\begin{bmatrix} 1 & -2 & 1 \\ -2 &  2 & 0 \\ 1 &  1 & 0 \end{bmatrix}
\begin{bmatrix} \mathbf{p}_{i-1} \\ \mathbf{p}_{i} \\ \mathbf{p}_{i+1} \end{bmatrix},
\qquad t \in [0,1], \quad i = \overline{1,m-1}

Однорідні кубічні B-сплайни[ред.ред. код]

b_3(t) = b_{j,3}(t) = \begin{cases}
\frac{1}{6}(t-t_j)^3, & t \in [t_j, \; t_{j+1}) \\
\frac{1}{6}\left(-3(t-t_{j+1})^3 + 3(t-t_{j+1})^2 + 3(t-t_{j+1}) + 1\right), & t \in [t_{j+1}, \; t_{j+2}) \\
..., & t \in [t_{j+2}, \; t_{j+3}) \\
\frac{1}{6}(1-(t-t_{j+3}))^3, & t \in [t_{j+3}, \; t_{j+4})
\end{cases}
B_3(t) = \begin{cases}
\frac{1}{6}(t+2)^3, & t \in [-2, \; -1) \\
\frac{1}{6}(-3t^3 - 6t^2 + 4), & t \in [-1, \; 0) \\
\frac{1}{6}(3t^3 - 6t^2 + 4), & t \in [0, \; 1) \\
\frac{1}{6}(-t+2)^3, & t \in [1, \; 2)
\end{cases}


В матричній формі:

 \mathbf{S}_i(t) = \begin{bmatrix} t^3 & t^2 & t & 1 \end{bmatrix} \frac{1}{6} \begin{bmatrix}
-1 &  3 & -3 & 1 \\
 3 & -6 &  3 & 0 \\
-3 &  0 &  3 & 0 \\
 1 &  4 &  1 & 0 \end{bmatrix}
\begin{bmatrix} \mathbf{p}_{i-1} \\ \mathbf{p}_{i} \\ \mathbf{p}_{i+1} \\ \mathbf{p}_{i+2} \end{bmatrix},
\quad t \in [0,1].

Дивіться також[ред.ред. код]