index
sorry...for now, only in Italian...

Tool di Modifica per curve N.U.R.B.S.

Lo scopo di questo progetto è studiare e realizzare diversi metodi di interazione con curve N.U.R.B.S., che permettano al disegnatore una via semplice ed intuitiva per ottenere la forma della curva voluta.

Fondamenti matematici delle curve N.U.R.(B-Spline)

Una curva N.U.R.B.S. è una generalizzazione delle curve B-Spline, verrà quindi brevemente introdotta la teoria che supporta la costruzione di questo genere di curve, per poi arrivare alla definizione di una N.U.R.B.S. vera e propria.

Da Bèzier alle B-Spline...

Le curve formate da un unico polinomio (Bèzier) non sono adatte per la costruzione di forme geometriche complesse, per le quali è necessario un alto numero di vincoli e quindi un polinomio di grado molto elevato; infatti per interpolare n-punti è necessario un polinomio di grado n-1, numericamente instabile a causa della propagazione degli errori di troncamento.
Inoltre, modificando i punti di controllo, tutta la curva viene influenzata.

Per eliminare questi inconvenienti sono state introdotte delle curve polinomiali a tratti, definite da

B-Spline

dove {Pi} sono i punti di controllo (che vanno a formare "IL POLIGONO DI CONTROLLO") mentre {fi} sono funzioni polinomiali non nulle solo su una porzione limitata dell'intervallo di variazione del parametro {u} e nulle in tutto il resto dell' intervallo, garantendo così il "local support". In questo modo, variando la posizione di un control point, la curva verrà influenzata solo in un suo intorno.

Funzioni base di una B-Spline...

Per calcolare le funzioni base di una curva B-Spline bisogna conoscere il grado {p} della curva e il vettore dei nodi {K}.
Dove nurbs è una sequenza di numeri reali detti nodi,
e dove nurbs con i=0, ... , i=m-1;
si definisce la "i-esima funzione di grado p", ovvero di ordine (p+1), indicata con nurbs, come segue:

funzioni_base

nella quale vengono evidenziati i seguenti importanti aspetti:

- per ogni p>0, {Ni,p(u)} è una combinazione lineare di due funzioni base di grado p-1;
- se nel calcolo delle funzioni base si determina un quoziente 0/0, viene definito uguale a zero;
- le funzioni di base sono ottenute per ricorsione sfruttando la formula di Cox-deBoor;
- i nodi possono coincidere, con la possibilità di avere dei sotto-intervalli di lunghezza nulla;
- le funzioni di base definite su un vettore dei nodi nodiBezier generano dei polinomi di Bernstein di grado {p} e sono quindi le stesse funzioni di base di una curva di Bèzier; in questo senso, quindi, le curve B-Spline sono generalizzazioni delle curve di Bèzier.

Creazione di una curva B-Spline:

Una curva B-Spline di grado {p} è definita da :

B-Spline

dove {Pi} sono i punti di controllo della curva, e {Ni,p(u)} sono le funzioni delle basi di curve B-Spline di grado "p", definite su un vettore "K" dei nodi non periodico e non uniforme:

nodi

e viene calcolata utilizzando questo procedimento:

- si ricava l'intervallo di appartenenza del parametro {u};
- si calcolano le funzioni di base diverse da zero;
- si ricava la curva moltiplicando il valore delle funzioni di base non nulle per i punti di controllo;

Dalle B-Spline alle Nurbs...

Una successiva generalizzazione è servita per risolvere determinati problemi che si hanno con le curve B-Spline; il più significativo è dato dall' impossibilità di disegnare figure semplici come il cerchio. Mediante questa evoluzione è infatti possibile rappresentare correttamente curve coniche, ed è possibile rappresentare curve molto complesse con un minor numero di punti di controllo.

Le N.U.R.B.S. (Non Uniform Rational B-Spline), sono curve razionali definite da punti di controllo e dai relativi pesi; aumentando il valore del peso di un punto di controllo avviciniamo la curva al punto stesso; viceversa il punto di controllo eserciterà una minor influenza sulla curva.
Una curva N.U.R.B.S. di grado "p" è definita da :

nurbs

Dove {Pi} sono i punti di controllo della curva, {Wi} sono i pesi assegnati ad ogni punto di controllo e {Ni,p(u)} sono le funzioni delle basi di curve B-spline di grado "p" definite su un vettore "K" dei nodi non periodico e non uniforme:

nodi_nurbs

Se assumiamo che a = 0, b = 1 e che {Wi} > 0 per ogni i, possiamo definire

nurbs2

questo ci permette di riscrivere l'equazione che definisce una curva N.U.R.B.S. come

nurbs3

dove {Ri,p(u)} sono le funzioni razionali delle basi che sono pezzi di funzioni razionali su u appartenente [0,1].

Su cosa si basa il tool di modifica...

Il tool di modifica realizzato in questo progetto, va ad agire sulle caratteristiche fondamentali di una curva N.U.R.B.S.
Sono stati sviluppati tre metodi per modificare la curva in maniera più intuitiva; questi metodi vanno ad influire sulla posizione dei Punti di Controllo. Una volta identificato il punto della curva su cui si vuole agire, vengono ricavati i Punti di Controllo che hanno influenza sullo stesso e si va a modificare la loro posizione contemporaneamente, ottenendo così una deformazione della curva più dolce.

Il tool calcola anche la derivata prima della curva ( la derivata di una funzione base è definita come combinazione lineare di due funzioni base di grado {p-1} ) fornendo così un idea più precisa della pendenza della curva nel punto selezionato.

Analizzerò ora le tre tipologie del tool realizzato:

- traslazione di tutti i Control Point che influenzano il punto della curva selezionato;

Per ottenere questa modifica si calcola il vettore spostamento subito dal puntatore del mouse, durante la modifica della curva, e si applica questa traslazione a un numero di Control Point pari al grado della curva. La traslazione viene pesata in base all'influenza che ogni singolo Control Point ha sul punto della curva selezionato. Quindi un Control Point con maggiore influenza sul punto, a parità del modulo del vettore generato, verrà traslato maggiormente rispetto a uno con influenza minore.


- rotazione di tutti i Control Point che influenzano il punto della curva selezionato;

Per ottenere questa modifica si assegna allo spostamento verticale del mouse un angolo teta, si applica poi una matrice di rotazione, con angolo teta, a un numero di Control Point pari al grado della curva. La rotazione così ottenuta influenza la curva facendo ruotare i Control Point rispetto al punto della curva selezionato.


- traslazione di due Control Point, tra i quali il punto selezionato è compreso;

Al contrario del precedente tool di traslazione in questa modifica vengono interessati solo i due Control Point tra i quali il punto della curva selezionato è compreso. Si calcola il vettore generato dallo spostamento del mouse,ad esempio dal punto "a" al punto "b", che viene applicato al Control Point inferiore come vettore [b-a] (segue la traslazione del mouse) mentre al Control Point superiore come vettore[a-b] (opposto alla traslazione del mouse).


Conclusioni:

Per concludere la parte teorica è necessario chiarire come il tool vada ad agire sulla curva. Una volta riempita la struttura dati N.U.R.B.S. con i parametri prima indicati, ed aver quindi ricavato tutti i suoi punti, gli algoritmi non fanno altro che:

- Individuare su quale punto della curva l'utente vuole interagire;
- Valutare le basi non nulle e quindi quali Control Point vanno ad influire sul punto della curva;
- Individuare tra quali Control Point il punto selezionato è compreso;
- Applicare una delle tre trasformazioni indicate in precedenza ai Control Point marcati;
- Ricalcolare i punti della curva, e la sua derivata prima.

Valid XHTML 1.0 Strict ! Valid CSS !