2 votos

Soporte de una B-spline con abrazadera

Sea una B-spline de grado $p$ se definirá por su ecuación paramétrica $$ \mathbf{r}(t) = \sum_{i=0}^n N_i^p(t)\mathbf{P}_i$$

donde el $n+1$ los puntos de control se indican con $\mathbf{P}_i$ . Las funciones de base $N_i^p$ se definen clásicamente como

$$ \begin{align} N_i^0(t) &= \begin{cases} 1 &\text{ if }t \in [t_i,t_{i+1}[ \\ 0 &\text{ otherwise } \end{cases} \end{align} $$ $$ \begin{align} N_i^p(t) = \frac{t - t_i}{t_{i + p} - t_i}N_i^{p-1} + \frac{t_{i + p + 1} - t}{t_{i + p + 1} - t_{i + 1}}N_{i+1}^{p-1} \end{align} $$ donde $\{t_i\}_{i = 0..m = n + p + 1}$ son los denominados nudos spline.

Tengo entendido que, debido al soporte compacto de esas funciones de base, sólo hay que evaluar la ecuación paramétrica sobre $[t_p,t_{m-p}]$ para obtener la spline completa.

Mi implementación actual de estas ecuaciones parece funcionar cuando la spline se deja abierta (ningún nudo tiene una multiplicidad igual a p + 1):

Para nudos uniformemente espaciados $t = [ 0, 1/6, 1/3, 1/2, 2/3, 5/6, 1 ]$ (m = 6) y una red de control compuesta por $n + 1 = 4$ puntos, lo que corresponde a una spline de grado $p =2$ Obtengo la siguiente curva (que, como he dicho, parece correcta)

Línea B abierta

Sin embargo, al forzar la sujeción de los extremos de la spline fijando

$ t= [ 0, 0, 0, 0.5, 1, 1, 1 ]$ sólo funciona en un extremo, como se muestra a continuación

Placa B-spline con abrazaderas. Sólo un extremo está bien sujeto

El extremo correspondiente a $t_p = 0$ se sujeta, pero el otro extremo correspondiente a $t_{m-p} = 1$ va a cero.

Creo que esta rareza es causada por la definición incorrecta del soporte de la línea B en el caso de sujeción. Encontré que al cambiar $ N_i^0(t) = 1 $ si $ t \in [t_i,t_{i+1}[ $ a $ N_i^0(t) = 1 $ si $ t \in [t_i,t_{i+1}] $ (es decir, utilizando un intervalo cerrado en su lugar) estaba permitiendo que la sujeción funcionara.

Dicho esto, no estoy seguro en absoluto de que sea necesario cambiar el soporte de las funciones de base para obtener una B-spline con abrazadera. ¿Me estoy perdiendo algo?

1voto

Tobias Puntos 147

Si se parte de una definición de b(asis)-splines como la del libro de De Boor " Guía práctica de splines " basándose en las diferencias divididas \begin{align*} N_i^p(t) = (t_{i+p+1}-t_i)[t_i,\ldots,t_{i+p+1}]_{\bar t} (\bar t - t)_+^p \end{align*} con \begin{align*} (x)_+^p = \begin{cases} 0 &@\ x\leq 0\\ x^p &@\ x > 0\end{cases} \end{align*} la convención $x^0:=0$ y una secuencia de nudos dada $(t_i)_{i=0}^m$ con $t_i\leq t_{i+1}$ . Entonces esto lleva a funciones continuas por la derecha. Observe que su fórmula recursiva funciona para esta definición.

Caso $p=0$ y $t_i<t_{i+1}$ : \begin{align*} N_i^0(t) &= (t_{i+1}-t_i) [t_i,t_{i+1}]_{\bar t} (\bar t - t)_+^0\\ &=(t_{i+1}-t_i)\frac{(t_{i+1}-t)_+^0 - (t_i - t)_+^0}{t_{i+1}-t_i}\\ &=\begin{cases} 1 &@\ t\in [t_i,t_{i+1}[\\ 0 &@\text{ else} \end{cases} \end{align*}

Última función base para el caso $p=1$ : \begin{align*} N^1_{n}(t) &= (t_{n+1}-t_n) [t_n,t_{n+1},t_{n+1}]_{\bar t}(\bar t-t)_+\\ &= [t_{n+1},t_{n+1}](\bar t - t)_+ - [t_n,t_{n+1}](\bar t - t)_+\\ &= \left.\frac{d}{d \bar t}(\bar t - t)_+\right|_{\bar t=t_{n+1}} - \frac{(t_{n+1} - t)_+ - (t_n - t)_+}{t_{n+1}-t_n}\\ &= \begin{cases} 0 &@\ t < t_n\\ \displaystyle 1-\frac{(t_{n+1} - t)_+ }{t_{n+1}-t_n}&@\ t_n\leq t < t_{n+1}\\ 0 &@\ t_{n+1}\leq t \end{cases} \end{align*} Esta función base es discontinua en $t=t_{n+1}$ . El límite de la izquierda no es igual al valor en $t=t_{n+1}$ .

En la práctica no se utiliza directamente la última función base sino la continuación continua de la misma a partir del intervalo semiabierto $[t_p,t_{m-p}[$ al intervalo cerrado $[t_p,t_{m-p}]$ .

Esto se hace simplemente limitando la búsqueda del índice $i$ con $t\in [t_i,t_{i+1}[$ al mayor de los índices del interior nudos.

Previamente hay que comprobar si $t$ se encuentra dentro del intervalo $[t_p,t_{m-p}]$ . Lugares $t$ fuera de este intervalo suelen recibir un tratamiento especial, como la extrapolación lineal (ésta es sólo una de las varias alternativas a la anulación que provocan allí las funciones base).

i-Ciencias.com

I-Ciencias es una comunidad de estudiantes y amantes de la ciencia en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X