B-spline

B-spline respecto a una línea compuesta de varios segmentos rectos

En el subcampo matemático de análisis numérico, una B-spline o Basis spline (o traducido una línea polinómica suave básica), es una función spline que tiene el mínimo soporte con respecto a un determinado grado, suavidad y partición del dominio. Un teorema fundamental establece que cada función spline de un determinado grado, suavidad y partición del dominio, se puede representar como una combinación lineal de B-splines del mismo grado y suavidad, y sobre la misma partición.[1]​ El término B-spline fue acuñado por Isaac Jacob Schoenberg y es la abreviatura de spline básica.[2]​ Las B-splines pueden ser evaluadas de una manera numéricamente estable por el algoritmo de De Boor. De un modo simplificado, se han creado variantes potencialmente más rápidas que el algoritmo de Boor, pero adolecen comparativamente de una menor estabilidad.[3][4]

En el subcampo de la informática de diseño asistido por computadora y de gráficos por computadora, el término B-spline se refiere con frecuencia a una curva parametrizada por otras funciones spline, que se expresan como combinaciones lineales de B-splines (en el sentido matemático anterior). Una B-spline es simplemente una generalización de una curva de Bézier, que puede evitar el fenómeno Runge sin necesidad de aumentar el grado de la B-spline.

Definición

Dado m valores reales ti, llamados nodos, con

t 0 t 1 t m 1 {\displaystyle t_{0}\leq t_{1}\leq \cdots \leq t_{m-1}}

una B-spline de grado n es una curva paramétrica

S : [ t 0 , t m 1 ] R 2 {\displaystyle \mathbf {S} :[t_{0},t_{m-1}]\to \mathbb {R} ^{2}}

compuesta por una combinación lineal de B-splines básicas bi,n de grado n

S ( t ) = i = 0 m n 2 P i b i , n ( t )  ,  t [ t n 1 , t m n ] {\displaystyle \mathbf {S} (t)=\sum _{i=0}^{m-n-2}\mathbf {P} _{i}b_{i,n}(t){\mbox{ , }}t\in [t_{n-1},t_{m-n}]} .

Los Pi se llaman puntos de control o puntos de Boor. Hay m-(n+1) puntos de control que forman una envoltura convexa.

Las m-(n+1) B-splines básicas de grado n se pueden definir mediante la fórmula de recursión Cox-de Boor

b j , 0 ( t ) := { 1 s i t j t < t j + 1 0 resto {\displaystyle b_{j,0}(t):=\left\{{\begin{matrix}1&\mathrm {si} \quad t_{j}\leq t<t_{j+1}\\0&{\text{resto}}\end{matrix}}\right.}
b j , n ( t ) := t t j t j + n t j b j , n 1 ( t ) + t j + n + 1 t t j + n + 1 t j + 1 b j + 1 , n 1 ( t ) . {\displaystyle 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).}

Cuando los nodos son equidistantes, la B-spline se dice que es uniforme, de otro modo sería no uniforme. Si dos nodos tj son idénticos, cualquiera de las posibles formas indeterminadas 0/0 se consideran 0.

Nótese que j+n+1 no puede exceder de m-1, lo que limita tanto a j como a n.

B-spline uniforme

Cuando la B-spline es uniforme, las B-splines básicas para un determinado grado n son solo copias cambiadas de una a otra. Una alternativa no recursiva de la definición de la B-splines m-n+1 básica es

b j , n ( t ) = b n ( t t j ) , j = 0 , , m n 1 {\displaystyle b_{j,n}(t)=b_{n}(t-t_{j}),\qquad \;j=0,\ldots ,m-n-1}

con

b n ( t ) := n + 1 n i = 0 n + 1 ω i , n ( t t i ) + n {\displaystyle b_{n}(t):={\frac {n+1}{n}}\sum _{i=0}^{n+1}\omega _{i,n}(t-t_{i})_{+}^{n}\,\;}

y

ω i , n := j = 0 , j i n + 1 1 t j t i {\displaystyle \omega _{i,n}:=\prod _{j=0,j\neq i}^{n+1}{\frac {1}{t_{j}-t_{i}}}\,\;}

dónde

( t t i ) + n {\displaystyle (t-t_{i})_{+}^{n}\,\;}

es la función de potencia truncada definida como

( t t i ) + n = { 0 si t < t i ( t t i ) n si t t i {\displaystyle (t-t_{i})_{+}^{n}=\left\{{\begin{matrix}0&{\text{si}}\quad t<t_{i}\\(t-t_{i})^{n}&{\text{si}}\quad t\geq t_{i}\end{matrix}}\right.}

B-spline cardinal

Si se define B0 como la función característica de [ 1 2 , 1 2 ] {\displaystyle [-{\tfrac {1}{2}},{\tfrac {1}{2}}]} , y Bk recursivamente como el producto convolución

B k := B k 1 B 0 ,   k = 1 , 2 , {\displaystyle B_{k}:=B_{k-1}*B_{0},~k=1,2,\dots }

entonces Bk se llaman B-splines cardinales (centradas). Esta definición se remonta a Schoenberg.

Bk tiene soporte compacto [ k + 1 2 , k + 1 2 ] {\displaystyle [-{\tfrac {k+1}{2}},{\tfrac {k+1}{2}}]} y es una función impar. Como k {\displaystyle k\rightarrow \infty } las B-splines cardinales normalizadas tienden a la función de Gauss.[5]

Notas

Cuando el número de puntos de control de Boor es el mismo que el grado, la B-Spline degenera en una curva de Bézier. La forma de las funciones base es determinada por la posición de los nodos. Escalar o trasladar el vector de nodo no altera las funciones de base.

El spline está contenido en el casco convexo de sus puntos de control. Una B-spline básica de grado n

b i , n ( t ) {\displaystyle b_{i,n}(t)\,\;}

es distinta de cero solo en el intervalo [ti, ti+n+1] esto es

b i , n ( t ) = { > 0 si t i t < t i + n + 1 0 resto {\displaystyle b_{i,n}(t)=\left\{{\begin{matrix}>0&{\text{si}}\quad t_{i}\leq t<t_{i+n+1}\\0&{\text{resto}}\end{matrix}}\right.}

En otras palabras si manipulamos un punto de control cambiamos solo el comportamiento local de la curva y no el comportamiento global como con las curvas de Bézier.

La función base se pueda obtener del polinomio de Bernstein.

Ejemplos

A continuación se muestran una serie de ejemplos de diversos tipos de B-splines.

B-spline constante

La B-spline constante es la spline más simple. Se define en un solo tramo de nodo y ni siquiera es continua en los nodos. Es solo la función indicador de los diferentes tramos de nodo.

b j , 0 ( t ) = 1 [ t j , t j + 1 ) = { 1 si t j t < t j + 1 0 resto {\displaystyle b_{j,0}(t)=1_{[t_{j},t_{j+1})}=\left\{{\begin{matrix}1&{\text{si}}\quad t_{j}\leq t<t_{j+1}\\0&{\text{resto}}\end{matrix}}\right.}

B-spline lineal

La B-spline lineal se define en dos tramos de nodo consecutivos y es continua sobre los nodos, pero no diferenciable.

b j , 1 ( t ) = { t t j t j + 1 t j si t j t < t j + 1 t j + 2 t t j + 2 t j + 1 si t j + 1 t < t j + 2 0 resto {\displaystyle b_{j,1}(t)=\left\{{\begin{matrix}{\frac {t-t_{j}}{t_{j+1}-t_{j}}}&{\text{si}}\quad t_{j}\leq t<t_{j+1}\\{\frac {t_{j+2}-t}{t_{j+2}-t_{j+1}}}&{\text{si}}\quad t_{j+1}\leq t<t_{j+2}\\0&{\text{resto}}\end{matrix}}\right.}

B-spline cuadrática uniforme

Las B-splines cuadráticas con nodo-vector uniforme es una forma común de B-spline. La función base puede ser calculada fácilmente , y es igual para cada segmento, en este caso.

b j , 2 ( t ) = { 1 2 ( 1 t ) 2 t 2 + t + 1 2 1 2 t 2 {\displaystyle b_{j,2}(t)={\begin{cases}{\frac {1}{2}}(1-t)^{2}\\-t^{2}+t+{\frac {1}{2}}\\{\frac {1}{2}}t^{2}\end{cases}}}

Puesto en forma de matriz, esto es:[6]

S i ( t ) = [ t 2 t 1 ] 1 2 [ 1 2 1 2 2 0 1 1 0 ] [ p i 1 p i p i + 1 ] {\displaystyle \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}}} para t [ 0 , 1 ] , i = 1 , 2 m 1 {\displaystyle t\in [0,1],i=1,2\ldots m-1}

B-spline cúbica

Una formulación B-spline para un solo segmento puede ser escrita como:

S i ( t ) = k = 0 3 P i 3 + k b i 3 + k , 3 ( t )  ;    t [ 0 , 1 ] {\displaystyle \mathbf {S} _{i}(t)=\sum _{k=0}^{3}\mathbf {P} _{i-3+k}b_{i-3+k,3}(t){\mbox{ ; }}\ t\in [0,1]}

donde Si es el imo segmento B-spline y P es el conjunto de puntos de control, el segmento i y k es el índice del punto de control local. Un conjunto de puntos de control sería P P i w = ( w i x i , w i y i , w i z i , w i ) {\displaystyle P_{i}^{w}=(w_{i}x_{i},w_{i}y_{i},w_{i}z_{i},w_{i})} donde el w i {\displaystyle w_{i}} es el peso, tirando de la curva hacia el punto de control P i {\displaystyle P_{i}} mientras que aumenta o se desplazan fuera de la curva, a la vez que disminuye.

Toda una serie de segmentos, las curvas m-2 ( S 3 , S 4 , . . . , S m {\displaystyle S_{3},S_{4},...,S_{m}} ) definidas por m+1 puntos de control ( P 0 , P 1 , . . . , P m , m 3 {\displaystyle P_{0},P_{1},...,P_{m},m\geq 3} ) como un B-spline en t, se definiría como:

S ( t ) = i = 0 m 1 P i b i , 3 ( t ) {\displaystyle \mathbf {S} (t)=\sum _{i=0}^{m-1}\mathbf {P} _{i}b_{i,3}(t)}

donde i es el número de puntos de control y t es un parámetro global dados los valores de los nodos. Esta formulación expresa una curva B-spline como una combinación lineal de funciones B-spline básicas, de ahí el nombre.

Hay dos tipos de B-spline - uniforme y no uniforme. Una B-spline no uniforme es una curva donde los intervalos entre los puntos sucesivos de control no son, o no necesariamente son, iguales (el vector de nodos de espacios de nodo interiores no son iguales). Una forma común es donde los intervalos se reducen sucesivamente a cero, interpolando los puntos de control.

B-spline cúbica uniforme

La B-spline cúbica con vector-nodo uniforme es la forma más usual de B-spline. La función base puede ser fácilmente calculada, y es igual para cada segmento, en este caso. Puesto en forma de matriz, esto es:

S i ( t ) = [ t 3 t 2 t 1 ] 1 6 [ 1 3 3 1 3 6 3 0 3 0 3 0 1 4 1 0 ] [ p i 1 p i p i + 1 p i + 2 ] {\displaystyle \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}}} para t [ 0 , 1 ] . {\displaystyle t\in [0,1].}

Véase también

  • Spline
  • M-spline
  • I-spline
  • NURBS (acrónimo inglés de la expresión Non Uniform Rational B-Splines)

Referencias

  1. Carl de Boor (1978). A Practical Guide to Splines. Springer-Verlag. pp. 113–114. 
  2. Carl de Boor (1978). A Practical Guide to Splines. Springer-Verlag. pp. 114–115. 
  3. Lee, E. T. Y. (diciembre de 1982). «A Simplified B-Spline Computation Routine». Computing (Springer-Verlag) 29 (4): 365-371. doi:10.1007/BF02246763. 
  4. Lee, E. T. Y. (1986). «Comments on some B-spline algorithms». Computing (Springer-Verlag) 36 (3): 229-238. doi:10.1007/BF02240069. 
  5. Brinks R: On the convergence of derivatives of B-splines to derivatives of the Gaussian function, Comp. Appl. Math., 27, 1, 2008
  6. «Splitting a uniform B-spline curve». Archivado desde el original el 14 de abril de 2009. Consultado el 20 de junio de 2009. 
Control de autoridades
  • Proyectos Wikimedia
  • Wd Datos: Q2083109
  • Commonscat Multimedia: B-splines / Q2083109

  • Wd Datos: Q2083109
  • Commonscat Multimedia: B-splines / Q2083109