CURVE B-SPLINES

Una curva spline è una curva composita, costruita congiungendo con continuità opportuna segmenti adiacenti di curve polinomiali. In genere, si utilizza la saldatura di tipo C-2: l'ultimo punto della prima curva coincide col primo punto della seconda curva e in questi due punti si ha la stessa tangente (derivata prima) e curvatura (derivata seconda).
Le b-splines incollano tra di loro più curve di Bézier e si dividono principalmente in tre tipi:
- b-splines uniformi: parametrizzate su intervalli [0,1]
- b-splines non uniformi: parametrizzate su intervalli differenti.
- b-splines non uniformi razionali, dette nurbs: definite come rapporto di curve polinomiali
Qui si tratteranno le b-splines uniformi cubiche.
 

B-SPLINES UNIFORMI CUBICHE: INTRODUZIONE
Le b-splines cubiche approssimano una serie di m+1 punti di controllo P0, P1...Pm, con m>=3. I punti di controllo definiscono m-2 segmenti cubici adiacenti di curva. Quindi, ad esempio, se ci sono 4 punti di controllo (P0,P1,P2,P3), la b-spline sarà formata da una sola curva di Bézier: in questo caso, non ci sarà differenza tra la b-spline e la curva di Bézier relative allo stesso poligono di controllo.
NB: il grado della curva è indipendente dal numero di punti di controllo.
Le b-splines si dicono uniformi se i differenti segmenti di curva corrispondono agli stessi intervalli nello spazio del parametro. Le funzioni base sono definite da una sequenza non decrescente di n+1 numeri reali (detti nodi):
t0 <= t1 <= ... tn
Questa sequenza è detta "sequenza dei valori nodali". L'intervallo parametrico tra successivi valori nodali non è necessariamente costante; in particolare, valori nodali successivi possono coincidere, come ad esempio <0, 0, 0, 1, 2, 3, 4, 4, 4>. Il numero n+1 dei valori di collegamento (knot values) supera il numero m+1 dei punti di controllo; sia k il grado della b-spline:
n + 1 = m + k
In genere le splines non passano per i punti di controllo, quindi neanche per il punto iniziale e finale del poligono di controllo (a differenza delle curve di Bézier). Tuttavia, se la molteplicità del valore nodale è pari al grado k della curva, la curva passerà per quel punto. Ad esempio, per far passare una cubica b-splines per il punto iniziale, occorre collassare i primi tre nodi: la sequenza dei valori nodali inizierà con 0, 0, 0.
La disposizione dei nodi modifica la forma della curva, anche se il poligono di controllo è lo stesso:

 

DE BOOR
Le curve b-splines sono così definite:

I polinomi B non sono quelli di Bernstein, ma altri sostitutivi calcolati con le formule ricorsive di de Boor:

Esiste anche una convenzione, che assegna ai nodi ti un valore intero (eventualmente ripetuto) tale che:
ti - ti-1 = 1 (oppure 0)
esempio: [0, 1, 2, 3, 3, 4] vettore dei nodi.
Occorre inoltre tener conto delle particolarità agli estremi e imporre che 0/0=1:
ti = 0           se i<h
ti = i-h+1    se h=<i<m
ti = m-h+2  se i=>m
Il programma sviluppato in questa sezione è stato progettato seguendo questa convenzione: vengono collassati i primi 3 nodi, i nodi intermedi vengono man mano incrementati di 1, gli ultimi 3 vengono collassati.
Le curve b-splines definite come sopra passano per i punti estremi.
 

OSSERVAZIONI: B-SPLINES E BEZIER A CONFRONTO
 
BEZIER B-SPLINE
Contenuta nel guscio convesso del poligono di controllo?
Intervallo t? [0,1] [a,b]
Grado? Numero vertici poligono - 1 Indipendente dal poligono di controllo
Passa per i punti del poligono di controllo? Solo per il primo e l'ultimo. In generale no, ma collassando tanti nodi quanto il grado della curva, può passare per qualsiasi punto del poligono.
La forma della curva rispecchia quella del poligono di controllo? No, solo approssimativamente. Sì. Con particolari accorgimenti, può anche coincidere col poligono di controllo.
Trasformazione affine sulla curva? Basta operare sul poligono di controllo. Basta operare sul poligono di controllo.
Controllo locale? No: se si modifica un punto del poligono di controllo, cambia tutta la curva. Sì: se si modifica un punto del poligono di controllo, cambia solo il tratto di curva relativo.
Si possono disegnare circonferenze? No Sì, con curve razionali.

Bibliografia:
"The essentials of CAGD", Gerald Farin, Dianne Hansford
Dispense e lucidi tratti da internet

NB: alcuni simboli possono non coincidere con quelli usati dal libro.