Documenti di Didattica
Documenti di Professioni
Documenti di Cultura
Bézier vs Spline
Progetto di Geometria Computazionale
di
Mauro Gentile
Teoria
Introduzione
Curve di Bézier
Le curve di Bézier sono una tipologia di curve polinomiali, forse il tipo più importante. Esse
sono definite tramite un poligono di controllo in un intervallo:
I = [0,1].
Il grado della curva è determinato dal valore K = n-1, con n uguale al numero di vertici del
poligono di controllo.
Definizione
Data una sagoma definita da n+1 punti, detti vertici di controllo, si costruisce la spezzata che li
interpola, tale spezzata è chiamata poligono di
controllo.
Si definisce Curva di Bézier la combinazione lineare tra i vertici di controllo Vi ed i pesi Bni(t):
Grado = 1
Grado = 3
Una curva di Bézier di grado pari a tre ha un poligono di controllo che è costituito da quattro
punti P0, P1, P2 e P3.
In questo caso il procedimento è analogo a quello del punto precedente solo che bisogna
raggiungere comunque curve di grado uno su cui operare e quindi sarà necessario un ulteriore
passaggio, fino ad ottenere la funzione:
P03(t) = (1-t)3*P0 + 3(1-t)2(t)*P1 + 3(1-t)2(t2)*P2 + (t3)*P3
La struttura è ancora quindi ricorsiva.
Algoritmo di De Casteljau
Questo algoritmo è proprio quello applicato negli esempi soprastanti. Partendo da un poligono
di controllo < P0,...,Pk>, si vengono a formare delle poligonali man mano di grado inferiore.
Quindi si passa ad una poligonale con (k-1) punti, poi ad una con (k-2) punti e così via, fino ad
ottenere un unico punto che è proprio il punto della curva di grado corrispondente al valore di t
all’interno dell’intervallo I = [0,1] scelto.
Calcolando tutti i punti della curva, corrispondenti quindi ai diversi valori di t all’interno
dell’intervallo, si ottiene la curva di Bézier desiderata.
L'algoritmo
di De Casteljau è un algoritmo ricorsivo, come già specificato in precedenza, che non è
conveniente in termini di calcolo computazionale in quanto necessita di calcolare numerosi
punti intermedi prima di ottenere il punto della curva.
Per costruire una curva di Bézier conviene usare l'algoritmo che adopera i polinomi
di Bernstein.
Polinomi di Bernstein
Osservando con attenzione le formule degli esempi soprastanti, soprattutto quelle per le curve
di Bézier di grado 2 e di grado 3, si nota che i polinomi (1-t) e t sono sempre presenti, corredati
da un coefficiente ed un esponente. È evidente inoltre che questi polinomi dipendono
chiaramente dal grado della curva in esame. I polinomi di Bernstein sono quindi così definiti:
con i = 0...k e k = grado della curva.
I polinomi di Bernstein hanno una importante caratteristica: la loro somma è sempre pari ad 1;
questo garantisce che per trasformare la curva tramite una affinità è sufficiente trasformare i
vertici del poligono di controllo.
La curva di Bézier ottenuta con i polinomi di Bernstein è dunque così definita:
Uniformare il grado di due curve
Per uniformare il grado di due curve di Bézier bisogna aggiungere
opportunamente dei punti al poligono di controllo della curva di grado
minore per portarla allo stesso grado della curva con cui si vuole
uniformarla.
Ad esempio:
Supponiamo di avere una curva di grado 1 ed una curva di grado 3. Bisogna aggiungere due
punti al poligono di controllo della curva di grado 1. I due nuovi punti devono essere
equidistanti da P0 e P1, dividendo il segmento P0P1 in tre parti uguali. Quindi si ha un poligono
di controllo formato da quattro punti allineati che genera una curva di grado 3.
Conclusioni
Lo studio delle curve di Bézier porta alle seguenti conclusioni:
• L'intervallo di una curva è sempre I = [0,1]
• Il primo punto coincide con P0, è proprio P0
• L'ultimo punto coincide con PK, è proprio PK
• La curva non passa mai per altri punti intermedi del poligono
di controllo
• La curva di Bézier è sempre contenuta all'interno dell'involucro
convesso del poligono di controllo
• Trasformare il poligono di controllo equivale a trasformare
l'intera curva
• Non esiste controllo locale
• Risulta impossibile costruire curve pari a circonferenze
• Per incollare curve diverse bisogna uniformarne i gradi.
Curve B-Spline
Le curve spline sono delle curve composte da altre curve. Esse sono dette
perciò curve composite. Una curva spline è costruita congiungendo curve
polinomiali mantenendone continuità e regolarità. In genere il tipo di
continuità adottato è di tipo C2, questo significa che l'ultimo punto della
curva antecedente ed il primo punto della curva successiva coincidono e la
tangente e la curvatura delle due curve in quel punto è identica. In pratica
questo significa che in quel punto, in cui le due curve coincidono, si ha lo
stesso valore della derivata prima e della derivata seconda.
Le curve B-Spline si distinguono dalle spline perché sono in realtà un caso particolare in cui
come curve polinomiali vengono adoperate le curve di Beziér.
Questa tipologia di curve spline si suddivide in tre differenti categorie: B-Spline uniformi, non
uniformi e nurbs.
Le B-Spline uniformi sono parametrizzate su intervalli di lunghezza unitaria.
Le B-Spline non uniformi sono invece parametrizzate su intervalli di tipo differente. Nella
terza categoria, oltre ad essere parametrizzate su intervalli differenti, le funzioni utilizzate sono
razionali, ossia sono definite come rapporto di funzioni polinomiali.
Definizione
Le spline sono oggetti fisici che risalgono alla seconda metà del novecento; si trattava di un
righello elastico utilizzato dagli ingegneri per costruire delle determinate curve interpolanti. La
forma ottenuta era quella che minimizzava l'energia elastica dell'oggetto, Cioè quella che
minimizza il quadrato della curvatura:
Naturalmente diverse
partizioni
identificano polinomi
diversi, una volta fissato l'ordine. L'insieme S'K,t delle funzioni così definite è uno spazio
vettoriale. Come è intuitivo pensare, su ogni intervallo possiamo considerare un qualunque
polinomio; quindi è possibile costruire diverse curve. Ogni polinomio di grado K è una
funzione di classe almeno CK-1; quindi per le funzioni polinomiali a tratti, globalmente è
sensato chiedere la continuità della (K - 1)esima derivata; in questo modo otteniamo un
sottospazio SK,t: lo spazio delle spline.
Vogliamo trovare una base, Bi,K per questo sottospazio SK,t; tale che ogni spline
possa essere scritta come combinazione lineare degli elementi della base:
Ordine = 1
Il grado è nullo, le funzioni sono quindi rette parallele all'asse x.
Vogliamo dei polinomi costanti
a tratti.
Ordine = 2
La generica spline è una spezzata:
Ordine = 3
Osserviamo che il numero di
intervalli presi in
considerazione per costruire la base aumenta come l'ordine del polinomio da costruire. Questo
fa sì che in ogni intervallo ci siano tre pezzi di parabola; e come per il caso di ordine 2 gli
elementi trovati non sono sufficienti per creare una base, dobbiamo completarla con 4
elementi: due a destra e due a sinistra dell'intervallo I = [a,b].
Ordine K generico
In generale mancheranno 2*(K-1) elementi per definire la base: K- 1 a destra dell'intervallo e
K- 1 a sinistra. Si dovrà, quindi, agire sulla partizione per aggiungere questi elementi.
Dopo l’analisi svolta, volgiamo la nostra attenzione alle curve B-Spline uniformi che sono il
tipo di curve adoperate all’interno del progetto.
B-Spline uniformi
Una curva B-Spline uniforme approssima una poligonale, data dai vertici di un poligono di
controllo in cui essa è coscritta.
Supponiamo di avere un poligono di controllo formato da n+1 punti, la curva B-Spline
approssima n+1 punti P0,P1,…,Pn.
Ad esempio, se supponessimo di avere un poligono di controllo formato da solamente 4 punti
<P0,P1,P2,P3>, la B-Spline sarà formata da un’unica curva di Bézier di grado 3; difatti in questo
caso non ci sarà alcuna differenza tra una B-Spline uniforme cubica ed una curva di Bézier
relative allo stesso poligono di controllo.
Il grado di una curva è assolutamente indipendente dal poligono di controllo e dal numero di
vertici in esso presenti.
Le funzioni spline di base sono definite a partire dai nodi, una sequenza non decrescente di
n+1 numeri reali <t0,t1,t2,…,tn>, detta “sequenza dei valori nodali”. L’intervallo dei parametri
tra valori successivi all’interno della sequenza in generale non è necessariamente costante, anzi
valori nodali successivi possono addirittura coincidere. Nel caso di spline uniformi come
quelle presentate all’interno di questo progetti vengono fatti collassate i primi g e gli ultimi g
nodi, dove g è il grado della curva, e gli intervalli valgono sempre 1.
Ad esempio, una sequenza del tipo <0,0,0,1,2,3,4,4,4> è del tutto lecita ed è difatti una
sequenza adoperata all’interno del progetto sviluppato, in cui i vertici più esterni del poligono
di controllo toccano la curva di grado 3.
In genere infatti le curve spline non passano né toccano il poligono di controllo nei suoi vertici,
nemmeno nel vertice iniziale o quello finale, al contrario di ciò che avviene per le curve di
Bézier. Esiste la possibilità però che questo accada. Se la molteplicità del numero di nodi è
pari al grado g della curva, la curva allora passerà in quel punto. Questo significa che per far sì
che una B-Spline cubica passi per il punto iniziale e finale occorrerà una sequenza di nodi
simile a quella sopra adoperata nell’esempio precedente. La sequenza inizierà quindi con <
0,0,0,…> e terminerà con <…,4,4,4> se la curva è di grado g=3 o, nel caso del grado g=4, con
< 0,0,0,0,…> e <…,4,4,4,4>.
La sovrapposizione di nodi va ad influire direttamente sulla forma della curva, andandola a
modificare, sebbene il poligono di controllo rimanga identico.
Analizziamo ora
il legame tra i
nodi ed il poligono di controllo. Tra essi non esiste alcun legame particolare se non il fatto che
il numero M dei nodi è pari al numero N dei vertici del poligono di controllo sommati al grado
g della curva B-Spline:
M=N+g-1
A questo punto che abbiamo capito come funzionano le curve B-Spline e cosa le
caratterizzano, vediamo qual è l’algoritmo adoperato per costruirle.
Algoritmo di De Boor
Le curve vengono definite per mezzo della seguente funzione:
con N = m + 1
Bisogna però prestare attenzione. I polinomi
qui indicati, non sono quelli di Bernstein, ma
quelli calcolati per mezzo delle formule ricorsive di De Boor:
Il programma sviluppato utilizza una convenzione ben specifica: tutte le curve spline costruite
sono di grado 3, eccezion fatta nel caso si modifichi il valore tramite l’opzione “Ordine”, in
questi casi i primi 3 nodi della sequenza vengono collassati, così come gli ultimi 3, mentre i
nodi intermedi sono equidistanti e il loro valore è man mano incrementato di 1. Ad esempio,
una sequenza potrebbe essere <0,0,0,1,2,3,4,4,4>.
Essendo così definite, le curve B-Spline così costruite passano necessariamente per i punti
estremi del poligono di controllo.