Uploaded on

The application consists of a graphical interface that allows users to create different types of parametric curves and manipulate different features.

The application consists of a graphical interface that allows users to create different types of parametric curves and manipulate different features.

More in: Education , Travel
  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Be the first to comment
    Be the first to like this
No Downloads

Views

Total Views
346
On Slideshare
0
From Embeds
0
Number of Embeds
0

Actions

Shares
Downloads
3
Comments
0
Likes
0

Embeds 0

No embeds

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
    No notes for slide

Transcript

  • 1. Principi di Computer Graphics - CurvEd - Tarcisio Fedrizzi 10 settembre 2009 Prof. R. De Amicis, Prof. G. Conti Sommario CurvEd ` stato realizzato nell’ambito del progetto dell’esame di e “Principi di Computer Graphics”. L’applicazione ` costituita da un’in- e terfaccia che consente all’utente di creare delle curve parametriche di diversi tipi e agire su diverse caratteristiche delle stesse. Indice 1 Descrizione del progetto 2 2 Manuale d’uso 3 2.1 Creazione . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3 2.2 Modifica . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4 3 Descrizione dell’implementazione 8 3.1 Libcurve . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8 3.2 Editor . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9 4 Cenni teorici 11 4.1 Hermite . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12 4.2 Hermite spline . . . . . . . . . . . . . . . . . . . . . . . . . . . 12 4.2.1 4 punti . . . . . . . . . . . . . . . . . . . . . . . . . . . 12 4.2.2 5 punti . . . . . . . . . . . . . . . . . . . . . . . . . . . 13 4.2.3 6 punti . . . . . . . . . . . . . . . . . . . . . . . . . . . 13 4.3 Bezier . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13 4.3.1 4 punti . . . . . . . . . . . . . . . . . . . . . . . . . . . 13 4.3.2 5 punti . . . . . . . . . . . . . . . . . . . . . . . . . . . 14 4.3.3 6 punti . . . . . . . . . . . . . . . . . . . . . . . . . . . 14 1
  • 2. 4.4 B-Splines . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14 4.5 B-Spline nonuniformi . . . . . . . . . . . . . . . . . . . . . . . 14 4.6 Conversione . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15 4.6.1 Da Bezier 4p a Hermite 2p 2d . . . . . . . . . . . . . . 15 4.6.2 Da Bezier 4p a Hermite 4p . . . . . . . . . . . . . . . . 16 4.6.3 Da Bezier 5p a Hermite 5p . . . . . . . . . . . . . . . . 16 4.6.4 Da Bezier 6p a Hermite 6p . . . . . . . . . . . . . . . . 16 4.6.5 Da Hermite 4p a Hermite 2p 2d . . . . . . . . . . . . . 16 4.6.6 Da Hermite 2p 2d a Hermite 4p . . . . . . . . . . . . . 16 4.6.7 Da Hermite 2p 2d a Bezier 4p . . . . . . . . . . . . . . 16 4.6.8 Da Hermite 4p a Bezier 4p . . . . . . . . . . . . . . . . 17 4.6.9 Da Hermite 5p a Bezier 5p . . . . . . . . . . . . . . . . 17 4.6.10 Da Hermite 6p a Bezier 6p . . . . . . . . . . . . . . . . 17 4.7 Riparametrizzazione . . . . . . . . . . . . . . . . . . . . . . . 17 1 Descrizione del progetto Le specifiche del progetto prevedevano l’implementazione di un editor di curve parametriche che ne implementasse svariati tipi e la possibilit` di agire a su di esse in varie maniere. In particolare nel progetto sono state implementate le seguenti funzionalit`:a • Creazione di vari tipi di curva parametrica: – Hermite (2 punti, 2 derivate) – Hermite spline (4, 5, 6 punti) – Bezier (4, 5, 6 punti) – B-Splines (4 o pi` punti) u – B-Splines non uniformi (2 o pi` punti) u • Cancellazione delle curve • Mirroring rispetto ad un piano mobile • Riparametrizzazione (per Hermite, Hermite spline e Bezier) • Conversione tra diversi tipi di curva (Hermite, Hermite spline e Bezier) • Modifica della risoluzione della curva (il numero di punti in cui il valore della curva ` calcolato) e • Stretching e scaling delle curve con bounding box 2
  • 3. • Visualizzazione di derivata prima e seconda (Hermite, Hermite spline, Bezier, B-Splines) • Visualizzazione del poligono di controllo per le curve di Bezier e delle derivate per le curve di Hermite • Centratura della curva alla selezione • Navigazione all’interno della scena 2 Manuale d’uso L’editor presenta due modalit` di azione: creazione e modifica. a 2.1 Creazione Nella modalit` creazione ` ( in Figura 1) possibile scegliere il tipo di curva a e che si vuole disegnare la sua risoluzione e per le B-Spline non uniformi alcuni parametri per la determinazione del vettore dei nodi. Per creare una curva ` sufficiente impostare il tipo di curva desiderate e suc- e Figura 1: Schermata per la creazione delle curve, in giallo si pu` vedere il o piano su cui ` possibile creare i punti di controllo per la curva e 3
  • 4. cessivamente premere sul piano dove desiderato, per avvicinare/allontanare ` il piano dalla visuale basta agire con la rotella del mouse. E possibile in qualunque momento modificare la visuale tenendo premuto il tasto maius- colo e utilizzando i tasti del mouse da sinistra a destra rispettivamente per ruotare la visuale, muovere la visuale (facendo ruotare la wheel ` possibile e zoommare), agire in maniera fluida sullo zoom. Quando si inserisce una curva di tipo spline non-uniforme ` possibile scegliere, come gi` accennato prima, e a alcuni parametri aggiuntivi ovvero il grado della curva (il parametro K), il tipo di vettore dei nodi (uniforme, uniforme aperto: con gli estremi della curva connessi rispettivamente al primo e all’ultimo punto di controllo), ed infine l’offset tra i nodi (per consentire una pi` agevole modifica dei valori dei u ` punti). E possibile vedere un’immagine della creazione di una curva B-Spline non uniforme in figura 2. Figura 2: Schermata per la creazione delle curve ` possibile vedere nel pan- e nello sulla destra i parametri aggiuntivi per la creazione delle curve B-spline nonuniformi 2.2 Modifica Per quanto riguarda la modalit` modifica ` possibile accedere a varie funzioni a e tramite di essa (si pu` vedere un l’interfaccia di modifica in figura 3). o Innanzitutto l’interfaccia visualizza una lista delle curve, da qui esse si pos- 4
  • 5. Figura 3: Schermata per la modifica delle curve. sono selezionare ed inoltre ` possibile inoltre, attivando l’opzione “aim on e select”, far s` che la curva selezionata venga inquadrata. ı Si passa poi quindi alle funzioni di editing vere e proprie la prima ` la can- e cellazione che permette di eliminare una delle curve esistenti. Il mirroring (vedi Figura 4) permette di creare delle copie delle curve spec- ulari rispetto ad un piano che pu` essere spostato e ruotato a piacimento, o perch´ la funzione di mirroring sia attiva ` necessario visualizzare il piano e e di mirroring nella parte bassa della finestra. Una volta fatto questo il piano ` visibile ed ` possibile spostarlo tramite il dragger e specchiare le curve a e e piacimento. La terza funzionalit` ` quella della riparametrizzazione ovvero il taglio della ae curva, essa ` disponibile per le curve di Hermite, per le spline di Hermite e e per le curve di Bezier. Una volta scelta la curva che si vuole tagliare ` e sufficiente premere il pulsante “Reparametrize” che fa entrare in modalit` a di riparametrizzazione, una volta entrati in questa modalit` ` possibile se- ae lezionare lungo la curva le nuove estremit` ed infine scegliere se tagliare la a curva o meno. Una volta scelti i punti verranno visualizzate due sfere in corrispondenza del punto di taglio, la sfera di colore viola indica il punto prescelto lungo la curva disegnata, mentre una seconda sfera trasparente di colore arancio indica il punto esatto in cui inizier` la nuova curva (i punti a possono differire di molto se la risoluzione della curva tagliata ` bassa) come e 5
  • 6. Figura 4: Curva specchiata rispetto al piano. visibile in figura 5. Altra funzione importante ` la funzione di conversione, questa permette di e ` convertire le curve tra diversi tipi, mantenendone la forma inalterata. E pos- sibile convertire le seguenti curve tra loro: Hermite, Hermite spline, Bezier (le conversioni sono possibili a seconda del grado della curva, quindi ad esempio una curva hermite pu` essere convertita in tutte e tre le forme, mentre una o curva di Bezier di grado 4 pu` essere convertita solo in una Hermite spline o di grado 4 ma non in una Hermite dato che ` disponibile solo il grado 3). e Effettuare la conversione ` molto semplice, ` sufficiente scegliere il tipo di e e curva di destinazione e premere il pulsante “Convert”. ` E possibile poi cambiare la risoluzione della curva che verr` ricalcolata im- a mediatamente Vi ` poi la possibilit` di deformare le curve lungo uno dei 3 assi, per fare e a questo ` necessario passare in modalit` “Bounding Box”(visibile in figura e a 6). Facendo questo verr` visualizzato un box attorno alla curva (e i dragger a in corrispondenza dei punti di controllo verranno nascosti) dotato di drag- ger negli angoli, trascinando i dragger in una delle direzioni possibili la curva verr` deformata assieme al box. Inoltre ` possibile selezionare lo scaling nella a e parte destra dell’interfaccia, cos` facendo la curva verr` deformata uniforme- ı a mente nelle 3 direzioni, mantenendo cos` il rapporto tra le stesse inalterato. ı Altra funzione, non propriamente di modifica, ` la visualizzazione delle e 6
  • 7. Figura 5: Punti di riparametrizzazione. derivate prima e seconda (vedi figura 7) (questa ` disponibile per le curve e ` di Hermite, Hermite Spline, Bezier, e B-Splines). E possibile mantenere la visualizzazione delle derivate durante la modifica delle curve, vedendo quindi come esse cambiano. L’ultima funzionalita di modifica ` specifica per una tipologia di curve, e ovvero le B-Spline nonuniformi in questo caso ` possibile agire su 3 tipi e di parametri: il grado della curva (K), il tipo di vettore dei nodi, i valori stessi dei nodi (soltanto scegliendo un vettore dei nodi non-uniforme). Per modificare il grado della curva ` sufficiente trascinare la barra sul numero e desiderato. E ` possibile cambiare la tipologia di vettore dei nodi e l’offset tra gli stessi selezionando la tipologia di nodi nel menu a tendina, agendo sul controllo che permette di scegliere il valore desiderato per l’offset e quindi premendo il pulsante di conferma (cambiando l’offset la forma della curva non cambia, ma questo serve per rendere pi` semplice la modifica del valore u dei nodi in modalit` nonuniforme). Infine ` possibile modificare il valore dei a e nodi, questo soltanto scegliendo la modalit` nonuniforme. Per modificare a un nodo ` sufficiente fare un doppio click su di esso e questo permetter` la e a 7
  • 8. Figura 6: Box per la deformazione della curva. modifica, per convalidare la modifica basta cliccare in qualsiasi altro punto. ` E possibile vedere i controlli per la modifica dei parametri delle b-spline in figura 8. 3 Descrizione dell’implementazione Il progetto ` stato implementato in linguaggio C++, questo ha permesso di e mantenere la parte di calcolo delle curve separata dal resto in maniera da poterne favorire il riutilizzo. Il progetto ` quindi suddiviso in due parti: e libcurve : ovvero la parte per il calcolo delle curve; editor : contiene il codice riguardante l’interfaccia grafica e la visualiz- zazione. 3.1 Libcurve Per quanto riguarda questa parte essa ` stata implementata senza l’ausilio di e librerie esterne, questa libreria ` costituita da alcune classi: Point, Points e e Curve. Inoltre ci sono svariati header file contenenti informazioni necessarie come ad esempio i vari file contenenti le matrici necessarie al calcolo delle curve. Diamo ora una breve descrizione delle classi sovraelencate: 8
  • 9. Figura 7: Visualizzazione delle derivate prima e seconda. Point : questa classe permette di gestire le informazioni riguardanti un punto in 3 dimensioni; Points : questa classe permette la gestione di una lista ordinata di punti, l’aggiunta, la cancellazione. Curve : questa classe si occupa invece di tutti i calcoli necessari per la ges- tione delle curve. Nella sua implementazione si ` cercato di rendere il e calcolo delle curve il pi` uniforme possibile in maniera da poter facil- u mente aggiungere nuovi tipi di curve. L’obiettivo ` stato raggiunto solo e in parte dato che aluni tipi di curve hanno delle differenze di base tali da rendere difficile un uniformazione. Comunque probabilmente data l’es- perienza acquisita a seguito di quest’implementazione una riscrittura parziale permetterebbe di riuscire a scrivere codice pi` generico. u 3.2 Editor Per la realizzazione della parte di interfaccia grafica (quindi di visualizzazione delle curve, e di interazione con l’utente), sono state utilizzate due librerie: QT : questa libreria in particolare ` stata utilizzata per la scrittura del- e l’interfaccia grafica del programma. La libreria Qt permette infatti la 9
  • 10. Figura 8: Schermata specifica per la modifica delle curve B-Spline nonuniformi. realizzazione di intere applicazioni multipiattaforma in maniera veloce e semplice. OpenSG : questa libreria invece ` stata utilizzata per la parte di visualiz- e zazione della scena contenente le curve. Essa infatti permette di gestire anche scene molto complesse potendo addirittura permettere la realiz- zazione di applicazioni multithreaded. Questa libreria pure essendo ben strutturata e completa da alcuni punti di vista ` carente sotto altri e aspetti come quello dell’interazione con l’utente e dal punto di vista della documentazione. Questa parte dell’applicazione ` suddivisa in tre gruppi di classi: e classi per la gestione : esse sono InteractionManager che permette di gestire il flusso di eventi tra l’utente e il resto dell’applicazione, e CurveManager che permette invece di gestire le istanze delle classi che mantengono i dati riguardanti le curve e quelli che gestiscono la loro visualizzazione. classi legate a QT : queste classi sono legate in particolar modo alla parte di interfaccia grafica tra di esse molto importanti sono la classe Gui che 10
  • 11. implementazione la gran parte dell’interfaccia e GlWidget che gestisce il canvas per il disegno delle curve. classi legate ad OpenSG : queste classi sono invege maggiormente legate ad OpenSG, esse gestiscono la parte di disegno delle curve, in parti- colare quindi di gestione della scena. Importanti tra queste ci sono la classe SceneManager che effettua la gestione di base della scena, come ad esempio la telecamera e OsgCurve che gestisce l’intera parte di disegno delle curve. 4 Cenni teorici Le curve parametriche permettono di avere una rappresentazione matemat- ica molto flessibile di una curva in n dimensioni (nel nostro caso 3). La rappresentazione parametrica delle curve permette in particolare di definire l’andamento delle coordinate di una curva nelle varie dimensioni in termini di un parametro che pu` essere immaginato come il tempo (quindi utilizzan- o do una dimensione aggiuntiva oltre a quelle che si intendono rappresentare). Una curva parametrica in n dimensioni ha la seguente struttura: n cn (u) = ai u i i=0 ad esempio una curva cubica ` rappresentata con la seguente formula e c(u) = au3 + bu2 + cu + d Per poter utilizzare questa rappresentazione delle curve ` necessario quindi e determinare i valori dei coefficienti. Solitamente quindi i vari termini della curva vengono espressi in una forma differente: n c(u) = Fi (u)pi i=0 dove le F sono delle funzioni di u chiamate “funzioni di miscelamento” e i p sono i cosiddetti “punti di controllo” che determinano la forma che la curva deve avere. In pratica le funzioni di miscelamento definiscono la maniera in cui i vari punti di controllo influenzano la forma della curva. Passiamo ora a presentare la teoria specifica per le varie curve. 11
  • 12. 4.1 Hermite I parametri necessari al calcolo delle curve di Hermite sono i punti iniziali e finali per cui passer` la curva e le rispettive derivate prime negli stessi punti. a Questa curva necessita quindi di 4 parametri ed ` una curva cubica essendo e il suo grado 3. La matrice geometrica dei coefficienti ` la seguente: e   2 −2 1 1  −3 3 −2 −1     0 0 1 0  1 0 0 0 La matrice utilizzata in realt` nel programma ` differente ed in particolare ` a e e la seguente:   −1 3 −3 1  3 −6 3 0     −3 3 0 0  1 0 0 0 questa ` stata ottenuta moltiplicando la matrice originale per la seguente e matrice:   0 1 0 0  0 0 0 1     1 −1 0 0  0 0 −1 1 Questo serve per non dover distinguere il caso delle curve di Hermite, che necessita di avere come parametri 2 punti e 2 vettori dagli altri tipi di curve che come parametri hanno soltanto dei punti. 4.2 Hermite spline Queste curve sono delle curve interpolanti ovvero passano per i punti di controllo. La loro derivazione ` simile a quella che delle curve di Hermite con e due punti e due derivate. Queste curve sono interessanti dal punto di vista teorico ma di difficile utilizzo dal punto di vista pratico in quanto la modifica di un punto nella curva ha effetto su tutta la forma della curva, ` quindi e difficile realizzare la forma desiderata. Vediamo le matrici dei coefficienti geometrici per le curve rappresentabili nel programma: 4.2.1 4 punti Qui di seguito vediamo la matrice dei coefficienti per il grado 3: 12
  • 13. −9 27 −27 9   2 2 2 2  9 −45 −9  −11 2 18 2    2 9 −9 2 1  1 0 0 0 4.2.2 5 punti Qui di seguito vediamo la matrice dei coefficienti per il grado 4:  32 −128 −128 32  3 3 64 3 3  −80 96 −128 224 −16  3  70 −208 3 −112 22    3  −25 3 76 3 3  16  3 16 −12 3 −1  1 0 0 0 0 4.2.3 6 punti Qui di seguito vediamo la matrice dei coefficienti per il grado 5:  −625 3125 −3125 3125 −3125 625  24 24 12 12 24 24 625 −4375 8125 6875 −625  8 12 12 −625 24 12  −2125 −7375 −5125  8875 6125 875    24 24 12 12 24 24 −1925 −325 −125  375 2675 1525     8 12 12 2 24 12 −137 −25 50   12 25 −25 3 4 1  1 0 0 0 0 0 4.3 Bezier Le curve di Bezier interpolano solo i punti di controllo all’inizio e alla fine della curva ed approssimano gli altri. Questo tipo di curve ` molto utilizzato e infatti la modifica di un punto di controllo non stravolge l’intera curva ma la modifica sempre meno pi` ci si allontana dal punto su cui si sta agendo. u Vediamo qui di seguito le matrici dei coefficienti geometrici delle curve di bezier. Queste matrici possono essere derivate a partire dai polinomi di Berstein: 4.3.1 4 punti Qui di seguito vediamo la matrice dei coefficienti per il grado 3: 13
  • 14.   −1 3 −3 1  3 −6 3 0     −3 3 0 0  1 0 0 0 4.3.2 5 punti Qui di seguito vediamo la matrice dei coefficienti per il grado 4:   1 −4 6 −4 1  −4 12 −12 4 0     6 −12 6 0 0     −4 4 0 0 0  1 0 0 0 0 4.3.3 6 punti Qui di seguito vediamo la matrice dei coefficienti per il grado 5:   −1 5 −10 10 −5 1  5 −20 30 −20 5 0     −10 30 −30 10 0 0     10 −20 10 0 0 0     −5 5 0 0 0 0  1 0 0 0 0 0 4.4 B-Splines Le B-Spline sono un’altra forma di curve parametriche. Qui sotto vediamo la loro matrice dei coefficienti:  −1 1 −1 1  6 2 2 6 1 1  2 −1 2 0  −1  1   2 0 2 0  1 2 1 6 3 6 0 4.5 B-Spline nonuniformi Le B-Spline nonuniformi sono un tipo di curve molto flessibile, esse infatti hanno la caratteristica che il movimento di un punto influenza soltanto una piccola parte della curva. A differenza delle altre forme non hanno una ma- trice dei coefficienti fissa, infatti esse sono costruite in maniera da utilizzare 14
  • 15. una serie di numeri definiti come nodi che influenzano la forma della curva. Le funzioni di miscelamento per queste curve possono essere calcolate con la seguente formula: 1 ti ≤ t < ti+1 Bi,1 (t) = 0 altrimenti t−ti ti+n −t Bi,n (t) = ti+n−1 −ti Bi,n−1 (t) + ti+n −ti+1 Bi+1,n−1 (t) dove i vari ti sono i nodi. L’unico vincolo sui valori dei nodi ` che questi e siano non-decrescenti, possono quindi esserci dei casi in cui il denominatore nelle funzioni di miscelamento ` zero, in questi casi si assume che l’intero e termine della somma sia zero. 4.6 Conversione La conversione tra le curve ` abbastanza semplice per le curve che hanno una e matrice dei coefficienti, infatti in questi casi ` sufficiente risolvere il seguente e sistema per ottenere la nuova rappresentazione. Se la matrice della prima curva ` M1 e quella della seconda curva ` M2 e G1 ` il vettore geometrico e e e contenente i punti di controllo per la curva di tipo 1, per ottenere una matrice di conversione dal tipo 1 al tipo 2 basta eguagliare i rispettivi sistemi nella seguente maniera: M2 G2 = M1 G1 abbiamo quindi che −1 G2 = M2 M1 G1 = M1,2 G1 . Quindi riepilogando per ottenere una matrice di conversione da una forma 1 ad una forma 2 ` sufficiente calcolare la matrice e −1 M1,2 = M2 M1 . Qui di seguito sono riportate le matrici per effettuare le conversioni utiliz- zate nel programma 4.6.1 Da Bezier 4p a Hermite 2p 2d   −2 3 0 0  1 0 0 0     0 0 0 1  0 0 −3 4 15
  • 16. 4.6.2 Da Bezier 4p a Hermite 4p   1 0 0 0  8 4 2 1   27 2 9 9 27   1 4 8  27 9 9 27 0 0 0 1 4.6.3 Da Bezier 5p a Hermite 5p   1 0 0 0 0  81 27 27 3 1   256 64 128 64 256   1 1 3 1 1   16 4 27 1 3 8 4 27 16 81    256 64 128 64 256 0 0 0 0 1 4.6.4 Da Bezier 6p a Hermite 6p   1 0 0 0 0 0  1024 256 128 32 4 1   3125 625 625 144 625 625 3125   243 162 216 48 32   3125 625 625 216 625 625 3125   32 48 144 162 243   3125 625 625 128 625 625 3125   1 4 32 256 1024  3125 625 625 625 625 3125 0 0 0 0 0 1 4.6.5 Da Hermite 4p a Hermite 2p 2d  −9 −9  2 9 2 1  1 0 0 0     0 0 0 1  −1 92 −9 13 2 4.6.6 Da Hermite 2p 2d a Hermite 4p   0 1 0 0  4 16 1 −2   27 27 3 −4  27  2 5 8  27 27 9 27 0 0 1 0 4.6.7 Da Hermite 2p 2d a Bezier 4p   0 1 0 0  1 2 0 0   3 3 4 −1   0 0  3 3 0 0 1 0 16
  • 17. 4.6.8 Da Hermite 4p a Bezier 4p   1 0 0 0  −5 3 −3 1   6 −3 2 3 −5   1 3  3 2 6 0 0 0 1 4.6.9 Da Hermite 5p a Bezier 5p   1 0 0 0 0  −13 4 −3 4 −1  12  13 −32 3 4 −32 20 13    18  −1 9 3 9 18 −13 4   4 3 −3 4 12  0 0 0 0 1 4.6.10 Da Hermite 6p a Bezier 6p   1 0 0 0 0 0  −77 10 −5 1  269 −145 −5 −115 5  60 3 4 5 −77 295 185    240 24 24  −77 185 −115 295 12 48 120 −145 269     120 −548 12 24 24 240 −77   1 10 −5 5  5 4 3 60 0 0 0 0 0 1 4.7 Riparametrizzazione Per poter avere una procedura di riparametrizzazione uniforme per i vari tipi di curva essa ` stata svolta in maniera un p` particolare, ovvero viene e o calcolata come per le spline in cui i nuovi punti sono lungo la curva e sono distribuiti in maniera regolare e poi i punti vengono convertiti nella corretta forma utilizzando le matrici di conversione sopra riportate. Ad esempio se abbiamo una curva di grado 3 e i punti di riparametrizzazione sono u1 ed u2 i nuovi punti di controllo saranno: u2 − u1 pi = c(i + u1 ) dove i ∈ N e 0 ≤ i ≤ 3 3 Una volta calcolati i nuovi punti di controllo ` sufficiente effettuare la con- e versione dalla spline alla forma desiderata e cos` otteniamo i nuovi punti di ı controllo. 17