CurvED

17
Principi di Computer Graphics - CurvEd - Tarcisio Fedrizzi 10 settembre 2009 Sommario CurvEd ` e stato realizzato nell’ambito del progetto dell’esame di “Principi di Computer Graphics”. L’applicazione ` e costituita da un’in- 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

description

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

Transcript of CurvED

Page 1: CurvED

Principi di Computer Graphics- CurvEd -

Tarcisio Fedrizzi

10 settembre 2009

Sommario

CurvEd e stato realizzato nell’ambito del progetto dell’esame di“Principi di Computer Graphics”. L’applicazione e costituita da un’in-terfaccia che consente all’utente di creare delle curve parametriche didiversi tipi e agire su diverse caratteristiche delle stesse.

Indice

1 Descrizione del progetto 2

2 Manuale d’uso 32.1 Creazione . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 32.2 Modifica . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4

3 Descrizione dell’implementazione 83.1 Libcurve . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 83.2 Editor . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9

4 Cenni teorici 114.1 Hermite . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 124.2 Hermite spline . . . . . . . . . . . . . . . . . . . . . . . . . . . 12

4.2.1 4 punti . . . . . . . . . . . . . . . . . . . . . . . . . . . 124.2.2 5 punti . . . . . . . . . . . . . . . . . . . . . . . . . . . 134.2.3 6 punti . . . . . . . . . . . . . . . . . . . . . . . . . . . 13

4.3 Bezier . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 134.3.1 4 punti . . . . . . . . . . . . . . . . . . . . . . . . . . . 134.3.2 5 punti . . . . . . . . . . . . . . . . . . . . . . . . . . . 144.3.3 6 punti . . . . . . . . . . . . . . . . . . . . . . . . . . . 14

1

Page 2: CurvED

4.4 B-Splines . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 144.5 B-Spline nonuniformi . . . . . . . . . . . . . . . . . . . . . . . 144.6 Conversione . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15

4.6.1 Da Bezier 4p a Hermite 2p 2d . . . . . . . . . . . . . . 154.6.2 Da Bezier 4p a Hermite 4p . . . . . . . . . . . . . . . . 164.6.3 Da Bezier 5p a Hermite 5p . . . . . . . . . . . . . . . . 164.6.4 Da Bezier 6p a Hermite 6p . . . . . . . . . . . . . . . . 164.6.5 Da Hermite 4p a Hermite 2p 2d . . . . . . . . . . . . . 164.6.6 Da Hermite 2p 2d a Hermite 4p . . . . . . . . . . . . . 164.6.7 Da Hermite 2p 2d a Bezier 4p . . . . . . . . . . . . . . 164.6.8 Da Hermite 4p a Bezier 4p . . . . . . . . . . . . . . . . 174.6.9 Da Hermite 5p a Bezier 5p . . . . . . . . . . . . . . . . 174.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 dicurve parametriche che ne implementasse svariati tipi e la possibilita di agiresu di esse in varie maniere.In particolare nel progetto sono state implementate le seguenti funzionalita:

• 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 piu punti)

– B-Splines non uniformi (2 o piu punti)

• 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 valoredella curva e calcolato)

• Stretching e scaling delle curve con bounding box

2

Page 3: CurvED

• Visualizzazione di derivata prima e seconda (Hermite, Hermite spline,Bezier, B-Splines)

• Visualizzazione del poligono di controllo per le curve di Bezier e dellederivate per le curve di Hermite

• Centratura della curva alla selezione

• Navigazione all’interno della scena

2 Manuale d’uso

L’editor presenta due modalita di azione: creazione e modifica.

2.1 Creazione

Nella modalita creazione e ( in Figura 1) possibile scegliere il tipo di curvache si vuole disegnare la sua risoluzione e per le B-Spline non uniformi alcuniparametri per la determinazione del vettore dei nodi.Per creare una curva e sufficiente impostare il tipo di curva desiderate e suc-

Figura 1: Schermata per la creazione delle curve, in giallo si puo vedere ilpiano su cui e possibile creare i punti di controllo per la curva

3

Page 4: CurvED

cessivamente premere sul piano dove desiderato, per avvicinare/allontanareil piano dalla visuale basta agire con la rotella del mouse. E possibile inqualunque momento modificare la visuale tenendo premuto il tasto maius-colo e utilizzando i tasti del mouse da sinistra a destra rispettivamente perruotare la visuale, muovere la visuale (facendo ruotare la wheel e possibilezoommare), agire in maniera fluida sullo zoom. Quando si inserisce una curvadi tipo spline non-uniforme e possibile scegliere, come gia accennato prima,alcuni parametri aggiuntivi ovvero il grado della curva (il parametro K), iltipo di vettore dei nodi (uniforme, uniforme aperto: con gli estremi dellacurva connessi rispettivamente al primo e all’ultimo punto di controllo), edinfine l’offset tra i nodi (per consentire una piu agevole modifica dei valori deipunti). E possibile vedere un’immagine della creazione di una curva B-Splinenon uniforme in figura 2.

Figura 2: Schermata per la creazione delle curve e possibile vedere nel pan-nello sulla destra i parametri aggiuntivi per la creazione delle curve B-splinenonuniformi

2.2 Modifica

Per quanto riguarda la modalita modifica e possibile accedere a varie funzionitramite di essa (si puo vedere un l’interfaccia di modifica in figura 3).Innanzitutto l’interfaccia visualizza una lista delle curve, da qui esse si pos-

4

Page 5: CurvED

Figura 3: Schermata per la modifica delle curve.

sono selezionare ed inoltre e possibile inoltre, attivando l’opzione “aim onselect”, far sı che la curva selezionata venga inquadrata.Si passa poi quindi alle funzioni di editing vere e proprie la prima e la can-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 puo essere spostato e ruotato a piacimento,perche la funzione di mirroring sia attiva e necessario visualizzare il pianodi mirroring nella parte bassa della finestra. Una volta fatto questo il pianoe visibile ed e possibile spostarlo tramite il dragger e specchiare le curve apiacimento.La terza funzionalita e quella della riparametrizzazione ovvero il taglio della

curva, essa e disponibile per le curve di Hermite, per le spline di Hermitee per le curve di Bezier. Una volta scelta la curva che si vuole tagliare esufficiente premere il pulsante “Reparametrize” che fa entrare in modalitadi riparametrizzazione, una volta entrati in questa modalita e possibile se-lezionare lungo la curva le nuove estremita ed infine scegliere se tagliare lacurva o meno. Una volta scelti i punti verranno visualizzate due sfere incorrispondenza del punto di taglio, la sfera di colore viola indica il puntoprescelto lungo la curva disegnata, mentre una seconda sfera trasparente dicolore arancio indica il punto esatto in cui iniziera la nuova curva (i puntipossono differire di molto se la risoluzione della curva tagliata e bassa) come

5

Page 6: CurvED

Figura 4: Curva specchiata rispetto al piano.

visibile in figura 5.Altra funzione importante e la funzione di conversione, questa permette di

convertire le curve tra diversi tipi, mantenendone la forma inalterata. E pos-sibile convertire le seguenti curve tra loro: Hermite, Hermite spline, Bezier (leconversioni sono possibili a seconda del grado della curva, quindi ad esempiouna curva hermite puo essere convertita in tutte e tre le forme, mentre unacurva di Bezier di grado 4 puo essere convertita solo in una Hermite splinedi grado 4 ma non in una Hermite dato che e disponibile solo il grado 3).Effettuare la conversione e molto semplice, e sufficiente scegliere il tipo dicurva di destinazione e premere il pulsante “Convert”.E possibile poi cambiare la risoluzione della curva che verra ricalcolata im-mediatamenteVi e poi la possibilita di deformare le curve lungo uno dei 3 assi, per farequesto e necessario passare in modalita “Bounding Box”(visibile in figura6). Facendo questo verra visualizzato un box attorno alla curva (e i draggerin corrispondenza dei punti di controllo verranno nascosti) dotato di drag-ger negli angoli, trascinando i dragger in una delle direzioni possibili la curvaverra deformata assieme al box. Inoltre e possibile selezionare lo scaling nellaparte destra dell’interfaccia, cosı facendo la curva verra deformata uniforme-mente nelle 3 direzioni, mantenendo cosı il rapporto tra le stesse inalterato.

Altra funzione, non propriamente di modifica, e la visualizzazione delle

6

Page 7: CurvED

Figura 5: Punti di riparametrizzazione.

derivate prima e seconda (vedi figura 7) (questa e disponibile per le curvedi Hermite, Hermite Spline, Bezier, e B-Splines). E possibile mantenere lavisualizzazione delle derivate durante la modifica delle curve, vedendo quindicome esse cambiano.

L’ultima funzionalita di modifica e specifica per una tipologia di curve,ovvero le B-Spline nonuniformi in questo caso e possibile agire su 3 tipidi parametri: il grado della curva (K), il tipo di vettore dei nodi, i valoristessi dei nodi (soltanto scegliendo un vettore dei nodi non-uniforme). Permodificare il grado della curva e sufficiente trascinare la barra sul numerodesiderato. E possibile cambiare la tipologia di vettore dei nodi e l’offset tragli stessi selezionando la tipologia di nodi nel menu a tendina, agendo sulcontrollo che permette di scegliere il valore desiderato per l’offset e quindipremendo il pulsante di conferma (cambiando l’offset la forma della curvanon cambia, ma questo serve per rendere piu semplice la modifica del valoredei nodi in modalita nonuniforme). Infine e possibile modificare il valore deinodi, questo soltanto scegliendo la modalita nonuniforme. Per modificareun nodo e sufficiente fare un doppio click su di esso e questo permettera la

7

Page 8: CurvED

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 infigura 8.

3 Descrizione dell’implementazione

Il progetto e stato implementato in linguaggio C++, questo ha permesso dimantenere la parte di calcolo delle curve separata dal resto in maniera dapoterne favorire il riutilizzo. Il progetto e quindi suddiviso in due parti:

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 e stata implementata senza l’ausilio dilibrerie esterne, questa libreria e costituita da alcune classi: Point, Points eCurve. Inoltre ci sono svariati header file contenenti informazioni necessariecome ad esempio i vari file contenenti le matrici necessarie al calcolo dellecurve. Diamo ora una breve descrizione delle classi sovraelencate:

8

Page 9: CurvED

Figura 7: Visualizzazione delle derivate prima e seconda.

Point : questa classe permette di gestire le informazioni riguardanti unpunto 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 e cercato di rendere ilcalcolo delle curve il piu uniforme possibile in maniera da poter facil-mente aggiungere nuovi tipi di curve. L’obiettivo e stato raggiunto soloin parte dato che aluni tipi di curve hanno delle differenze di base tali darendere difficile un uniformazione. Comunque probabilmente data l’es-perienza acquisita a seguito di quest’implementazione una riscritturaparziale permetterebbe di riuscire a scrivere codice piu generico.

3.2 Editor

Per la realizzazione della parte di interfaccia grafica (quindi di visualizzazionedelle curve, e di interazione con l’utente), sono state utilizzate due librerie:

QT : questa libreria in particolare e stata utilizzata per la scrittura del-l’interfaccia grafica del programma. La libreria Qt permette infatti la

9

Page 10: CurvED

Figura 8: Schermata specifica per la modifica delle curve B-Splinenonuniformi.

realizzazione di intere applicazioni multipiattaforma in maniera velocee semplice.

OpenSG : questa libreria invece e stata utilizzata per la parte di visualiz-zazione della scena contenente le curve. Essa infatti permette di gestireanche scene molto complesse potendo addirittura permettere la realiz-zazione di applicazioni multithreaded. Questa libreria pure essendoben strutturata e completa da alcuni punti di vista e carente sotto altriaspetti come quello dell’interazione con l’utente e dal punto di vistadella documentazione.

Questa parte dell’applicazione e suddivisa in tre gruppi di classi:

classi per la gestione : esse sono InteractionManager che permette digestire il flusso di eventi tra l’utente e il resto dell’applicazione, eCurveManager che permette invece di gestire le istanze delle classi chemantengono i dati riguardanti le curve e quelli che gestiscono la lorovisualizzazione.

classi legate a QT : queste classi sono legate in particolar modo alla partedi interfaccia grafica tra di esse molto importanti sono la classe Gui che

10

Page 11: CurvED

implementazione la gran parte dell’interfaccia e GlWidget che gestisceil canvas per il disegno delle curve.

classi legate ad OpenSG : queste classi sono invege maggiormente legatead OpenSG, esse gestiscono la parte di disegno delle curve, in parti-colare quindi di gestione della scena. Importanti tra queste ci sonola classe SceneManager che effettua la gestione di base della scena,come ad esempio la telecamera e OsgCurve che gestisce l’intera partedi 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). Larappresentazione parametrica delle curve permette in particolare di definirel’andamento delle coordinate di una curva nelle varie dimensioni in terminidi un parametro che puo essere immaginato come il tempo (quindi utilizzan-do una dimensione aggiuntiva oltre a quelle che si intendono rappresentare).Una curva parametrica in n dimensioni ha la seguente struttura:

cn(u) =n∑

i=0

aiui

ad esempio una curva cubica e rappresentata con la seguente formula

c(u) = au3 + bu2 + cu + d

Per poter utilizzare questa rappresentazione delle curve e necessario quindideterminare i valori dei coefficienti. Solitamente quindi i vari termini dellacurva vengono espressi in una forma differente:

c(u) =n∑

i=0

Fi(u)pi

dove le F sono delle funzioni di u chiamate “funzioni di miscelamento” e i psono i cosiddetti “punti di controllo” che determinano la forma che la curvadeve avere. In pratica le funzioni di miscelamento definiscono la maniera incui i vari punti di controllo influenzano la forma della curva. Passiamo ora apresentare la teoria specifica per le varie curve.

11

Page 12: CurvED

4.1 Hermite

I parametri necessari al calcolo delle curve di Hermite sono i punti iniziali efinali per cui passera la curva e le rispettive derivate prime negli stessi punti.Questa curva necessita quindi di 4 parametri ed e una curva cubica essendoil suo grado 3. La matrice geometrica dei coefficienti e la seguente:

2 −2 1 1−3 3 −2 −10 0 1 01 0 0 0

La matrice utilizzata in realta nel programma e differente ed in particolare ela seguente:

−1 3 −3 13 −6 3 0−3 3 0 01 0 0 0

questa e stata ottenuta moltiplicando la matrice originale per la seguentematrice:

0 1 0 00 0 0 11 −1 0 00 0 −1 1

Questo serve per non dover distinguere il caso delle curve di Hermite, chenecessita di avere come parametri 2 punti e 2 vettori dagli altri tipi di curveche come parametri hanno soltanto dei punti.

4.2 Hermite spline

Queste curve sono delle curve interpolanti ovvero passano per i punti dicontrollo. La loro derivazione e simile a quella che delle curve di Hermite condue punti e due derivate. Queste curve sono interessanti dal punto di vistateorico ma di difficile utilizzo dal punto di vista pratico in quanto la modificadi un punto nella curva ha effetto su tutta la forma della curva, e quindidifficile realizzare la forma desiderata. Vediamo le matrici dei coefficientigeometrici per le curve rappresentabili nel programma:

4.2.1 4 punti

Qui di seguito vediamo la matrice dei coefficienti per il grado 3:

12

Page 13: CurvED

−92

272

−272

92

9 −452

18 −92

−112

9 −92

11 0 0 0

4.2.2 5 punti

Qui di seguito vediamo la matrice dei coefficienti per il grado 4:323

−1283

64 −1283

323

−803

96 −128 2243−16

703

−2083

76 −1123

223

−253

16 −12 163

−11 0 0 0 0

4.2.3 6 punti

Qui di seguito vediamo la matrice dei coefficienti per il grado 5:

−62524

312524

−312512

312512

−312524

62524

6258

−437512

812512

−625 687524

−62512

−212524

887524

−737512

612512

−512524

87524

3758

−192512

267512

−3252

152524

−12512

−13712

25 −25 503

−254

11 0 0 0 0 0

4.3 Bezier

Le curve di Bezier interpolano solo i punti di controllo all’inizio e alla finedella curva ed approssimano gli altri. Questo tipo di curve e molto utilizzatoinfatti la modifica di un punto di controllo non stravolge l’intera curva mala modifica sempre meno piu ci si allontana dal punto su cui si sta agendo.Vediamo qui di seguito le matrici dei coefficienti geometrici delle curve dibezier. Queste matrici possono essere derivate a partire dai polinomi diBerstein:

4.3.1 4 punti

Qui di seguito vediamo la matrice dei coefficienti per il grado 3:

13

Page 14: CurvED

−1 3 −3 13 −6 3 0−3 3 0 01 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 06 −12 6 0 0−4 4 0 0 01 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 15 −20 30 −20 5 0−10 30 −30 10 0 010 −20 10 0 0 0−5 5 0 0 0 01 0 0 0 0 0

4.4 B-Splines

Le B-Spline sono un’altra forma di curve parametriche. Qui sotto vediamola loro matrice dei coefficienti:

−16

12

−12

16

12−1 1

20

−12

0 12

016

23

16

0

4.5 B-Spline nonuniformi

Le B-Spline nonuniformi sono un tipo di curve molto flessibile, esse infattihanno la caratteristica che il movimento di un punto influenza soltanto unapiccola 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

Page 15: CurvED

una serie di numeri definiti come nodi che influenzano la forma della curva.Le funzioni di miscelamento per queste curve possono essere calcolate con laseguente formula:

Bi,1(t) =

{1 ti ≤ t < ti+1

0 altrimenti

Bi,n(t) = t−titi+n−1−ti

Bi,n−1(t) + ti+n−tti+n−ti+1

Bi+1,n−1(t)

dove i vari ti sono i nodi. L’unico vincolo sui valori dei nodi e che questisiano non-decrescenti, possono quindi esserci dei casi in cui il denominatorenelle funzioni di miscelamento e zero, in questi casi si assume che l’interotermine della somma sia zero.

4.6 Conversione

La conversione tra le curve e abbastanza semplice per le curve che hanno unamatrice dei coefficienti, infatti in questi casi e sufficiente risolvere il seguentesistema per ottenere la nuova rappresentazione. Se la matrice della primacurva e M1 e quella della seconda curva e M2 e G1 e il vettore geometricocontenente i punti di controllo per la curva di tipo 1, per ottenere una matricedi conversione dal tipo 1 al tipo 2 basta eguagliare i rispettivi sistemi nellaseguente maniera:

M2G2 = M1G1

abbiamo quindi cheG2 = M−1

2 M1G1 = M1,2G1

. Quindi riepilogando per ottenere una matrice di conversione da una forma1 ad una forma 2 e sufficiente calcolare la matrice

M1,2 = M−12 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 01 0 0 00 0 0 10 0 −3 4

15

Page 16: CurvED

4.6.2 Da Bezier 4p a Hermite 4p1 0 0 0827

49

29

127

127

29

49

827

0 0 0 1

4.6.3 Da Bezier 5p a Hermite 5p

1 0 0 0 081256

2764

27128

364

1256

116

14

38

14

116

1256

364

27128

2764

81256

0 0 0 0 1

4.6.4 Da Bezier 6p a Hermite 6p

1 0 0 0 0 010243125

256625

128625

32625

4625

13125

2433125

162625

216625

144625

48625

323125

323125

48625

144625

216625

162625

2433125

13125

4625

32625

128625

256625

10243125

0 0 0 0 0 1

4.6.5 Da Hermite 4p a Hermite 2p 2d

−92

9 −92

11 0 0 00 0 0 1−1 9

2−9 13

2

4.6.6 Da Hermite 2p 2d a Hermite 4p

0 1 0 0427

1627

13

−227

227

527

89

−427

0 0 1 0

4.6.7 Da Hermite 2p 2d a Bezier 4p

0 1 0 013

23

0 00 0 4

3−13

0 0 1 0

16

Page 17: CurvED

4.6.8 Da Hermite 4p a Bezier 4p1 0 0 0−56

3 −32

13

13

−32

3 −56

0 0 0 1

4.6.9 Da Hermite 5p a Bezier 5p

1 0 0 0 0−1312

4 −3 43

−14

1318

−329

203

−329

1318

−14

43−3 4 −13

12

0 0 0 0 1

4.6.10 Da Hermite 6p a Bezier 6p

1 0 0 0 0 0−7760

5 −5 103

−54

15

269240

−14524

29524

−11512

18548

−77120

−77120

18548

−11512

29524

−14524

269240

15

−54

103

−5 5 −7760

0 0 0 0 0 1

4.7 Riparametrizzazione

Per poter avere una procedura di riparametrizzazione uniforme per i varitipi di curva essa e stata svolta in maniera un po particolare, ovvero vienecalcolata come per le spline in cui i nuovi punti sono lungo la curva e sonodistribuiti in maniera regolare e poi i punti vengono convertiti nella correttaforma utilizzando le matrici di conversione sopra riportate. Ad esempio seabbiamo una curva di grado 3 e i punti di riparametrizzazione sono u1 ed u2

i nuovi punti di controllo saranno:

pi = c(iu2 − u1

3+ u1) dove i ∈ N e 0 ≤ i ≤ 3

Una volta calcolati i nuovi punti di controllo e sufficiente effettuare la con-versione dalla spline alla forma desiderata e cosı otteniamo i nuovi punti dicontrollo.

17