Principi di Computer Graphics
                  Progetto JCurves
         Prof. R. De Amicis, Prof. G. Conti
             ...
4.2.1 Bezier 3 punti . . . . . . . . .     . . . .   .   .   .   .   .   .   .   .   .   .   18
         4.2.2 Bezier 4 pu...
1      Scopo del progetto
Il progetto prevede la realizzazione di un software per la creazione e la ges-
tione di curve 3D...
• modifica delle propriet` geometriche della curva selezionata: ` possi-
                              a                   ...
2      Caratteristiche tecniche e implementazione
Come gi` accennato, il software ` scritto in Java con l’ausilio delle li...
2.1    Organizzazione delle classi
Verranno ora discusse nel dettaglio le classi implementate.

    Il modulo gui contiene...
• DrawingPlane: la classe si occupa della creazione dello spazio di lavoro,
     cio` i piani lungo gli assi x, y, z che a...
Il formato del file di testo (che pu` contenere i dati di una o pi` curve)
                                        o       ...
perch` sfrutta le formule matematiche del piano e della curva su cui
           e
     applicare il mirroring. Una funzion...
3     Manuale utente
L’ambiente di lavoro del programma si presenta come in figura 1 (utilizzare
preferibilmente la risoluz...
3.1    Strumenti per la modifica del punto di vista

              rotazione del punto di vista: cliccando questo bottone e...
salva tutte le curve in file testuale: questo bottone si compor-
              ta in modo analogo al bottone per il “salvat...
2. muovere i punti di controllo fino a quando non hanno raggiunto la
     posizione desiderata: per muoverli ` sufficiente tr...
2. la lista dei punti di controllo contiene i valori delle coordinate tridimen-
     sionali dei punti di controllo della ...
3.4.1   Creazione di una curva speculare
Per creare una curva che sia la speculare di una data curva seguire i passi
illus...
1. selezionare la curva di partenza e andare nel pannello “Modify”

  2. cliccare il bottone “Riparametrize”

  3. cliccar...
4       Formule matematiche
In generale, le curve parametriche trattate possono essere espresse tramite
una delle seguenti...
coefficienti geometrici della curva riparametrizzata (parametro v):
                           
                           ...
e P ` il vettore dei coefficienti geometrici della curva iniziale (con parametro
       e
che varia tra 0 e 1).

    I coeffic...
4.2.3       Bezier 5 punti
5 punti di controllo → n = 4

Forma geometrica:
   p(u) = (1 − u)4 p0 + 4u(1 − u)3 p1 + 6u2 (1 ...
4.3     Curve Spline
Le curve di tipo Spline interpolano tutti i punti di controllo della curva.

4.3.1   Spline 3 punti
3...
4.3.3       Spline 5 punti
5 punti di controllo → grado della curva interpolante = 4

Forma matriciale coefficienti geometri...
4.5     Stretching di una curva
La funzionalit` di stretching consiste nella possibilit` di deformare la curva
           ...
4.5.1    Scaling di una curva
La propriet` da garantire in questo caso ` la deformazione uniforme della
             a    ...
Upcoming SlideShare
Loading in …5
×

JCurves

570 views
517 views

Published on

A graphical interface for creating different types of 3D curves (Hermite, Bezier, Spline and BSpline). Written in Java with support of Java3D libraries, it enables the real-time manipulation of different parameters such as control points, the size of the curve, the style line etc...

0 Comments
0 Likes
Statistics
Notes
  • Be the first to comment

  • Be the first to like this

No Downloads
Views
Total views
570
On SlideShare
0
From Embeds
0
Number of Embeds
2
Actions
Shares
0
Downloads
3
Comments
0
Likes
0
Embeds 0
No embeds

No notes for slide

JCurves

  1. 1. Principi di Computer Graphics Progetto JCurves Prof. R. De Amicis, Prof. G. Conti Manuel Borile - matr. 118179 Alida Palmisano - matr. 118198 18 luglio 2006 Sommario Il progetto consiste in un’interfaccia grafica per la creazione di diversi tipi di curve in 3D (Hermite, Bezier, Spline e BSpline). Il programma permette, inoltre, la modifica in tempo reale di diversi parametri come i punti di controllo, la grandezza della curva, lo stile della linea, etc. Il presente documento contiene la descrizione architetturale del progetto, un piccolo manuale utente per l’utilizzo del software e una spiegazione delle formule matematiche utilizzate per implementare le funzionalit` di modifica dei diversi tipi di curva (riferirsi alla docu- a mentazione Javadoc per i dettagli specifici del codice). Indice 1 Scopo del progetto 3 2 Caratteristiche tecniche e implementazione 5 2.1 Organizzazione delle classi . . . . . . . . . . . . . . . . . . . . 6 3 Manuale utente 10 3.1 Strumenti per la modifica del punto di vista . . . . . . . . . . 11 3.2 Caricamento / Salvataggio di curve . . . . . . . . . . . . . . . 11 3.3 Creazione di una nuova curva . . . . . . . . . . . . . . . . . . 12 3.4 Modifica/visualizzazione delle propriet` di una a curva . . . . . 13 3.4.1 Creazione di una curva speculare . . . . . . . . . . . . 15 3.4.2 Riparametrizzazione di una curva . . . . . . . . . . . . 15 3.5 Funzionalit` generali . . . . . . . . . . . . . . a . . . . . . . . . 16 4 Formule matematiche 17 4.1 Curve di Hermite . . . . . . . . . . . . . . . . . . . . . . . . . 17 4.2 Curve di Bezier . . . . . . . . . . . . . . . . . . . . . . . . . . 18
  2. 2. 4.2.1 Bezier 3 punti . . . . . . . . . . . . . . . . . . . . . . . 18 4.2.2 Bezier 4 punti . . . . . . . . . . . . . . . . . . . . . . . 19 4.2.3 Bezier 5 punti . . . . . . . . . . . . . . . . . . . . . . . 20 4.3 Curve Spline . . . . . . . . . . . . . . . . . . . . . . . . . . . . 21 4.3.1 Spline 3 punti . . . . . . . . . . . . . . . . . . . . . . . 21 4.3.2 Spline 4 punti . . . . . . . . . . . . . . . . . . . . . . . 21 4.3.3 Spline 5 punti . . . . . . . . . . . . . . . . . . . . . . . 22 4.4 B-Spline . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 22 4.5 Stretching di una curva . . . . . . . . . . . . . . . . . . . . . . 23 4.5.1 Scaling di una curva . . . . . . . . . . . . . . . . . . . 24 4.6 Mirroring di una curva rispetto ad un piano . . . . . . . . . . 24 Manuel Borile & Alida Palmisano 2
  3. 3. 1 Scopo del progetto Il progetto prevede la realizzazione di un software per la creazione e la ges- tione di curve 3D. Il programma, scritto in Java, ha richiesto l’utilizzo delle librerie Java3D. In particolare, le curve trattate sono dei seguenti tipi: • curve interpolanti: – Hermite: 2 punti + 2 derivate prime   3 punti – Spline: 4 punti 5 punti  • curve approssimanti:   3 punti – Bezier: 4 punti 5 punti    N = 4 K = 1, 2, 3, 4 – B-Spline: N = 5 K = 1, 2, 3, 4 N = 6 K = 1, 2, 3, 4  Le funzionalit` implementate per i vari tipi di curva sono le seguenti: a • troncamento (riparametrizzazione) della curva • drag & drop: ` possibile selezionare una curva e crearne una sua copia e e/o trascinarla all’interno dello spazio 3D • mirroring: dopo aver selezionato una curva, ` possibile posizionare/orien- e tare un piano di mirroring e creare, premendo l’opportuno bottone, la specchiata della curva selezionata • stretch: dopo aver selezionato una curva ` possibile visualizzarne il e bounding box, i cui vertici sono dragger selezionabili e permettono di rimodellare la curva: in particolare, trascinandoli semplicemente nello spazio 3D la curva verr` modificata di conseguenza e se durante il a trascinamento viene mantenuto premuto il tasto SHIFT, la curva sar` a rimodellata in maniera proporzionale (altrimenti la curva pu` essere o rimodellata a piacere) • cancellazione di una o pi` curve u • visualizzazione della derivata prima e seconda della curva selezionata • modifica delle propriet` grafiche della curva selezionata: ` possibile, a e utilizzando gli appositi campi, modificare il nome, la grossezza della linea, il suo colore e il suo stile (continuo, tratteggiato, tratto-punto, punteggiato) Manuel Borile & Alida Palmisano 3
  4. 4. • modifica delle propriet` geometriche della curva selezionata: ` possi- a e bile modificare i punti di controllo della curva semplicemente agendo sui dragger ad essi associati e spostandoli nello spazio 3D (in tempo reale si potr` osservare l’effetto dello spostamento del punto di control- a lo sulla forma della curva). Per le curve di tipo B-Spline ` possibile, e utilizzando un opportuno strumento, modificare il valore del parametro K, cio` il grado della curva utilizzata per collegare i punti di controllo e (per i dettagli, si vedano spiegazioni successive) e i valori del parametro t (cio` i nodi della curva) e • snap: attivando questa funzionalit`, tutti i movimenti nello spazio 3D a (spostamento di curve, punti di controllo, . . . ) avvengono utilizzando un intervallo discreto fisso modificabile dall’utente Le funzionalit` generiche implementate sono le seguenti: a • rotazione punto di vista: dopo aver cliccato il bottone opportuno, tenen- do premuto il tasto sinistro ` possibile, trascinando il cursore, ruotare e il punto di vista, mentre tenendo premuto il tasto destro e trascinando il cursore ` possibile spostare il punto di vista e • zoom: dopo aver cliccato il bottone opportuno, cliccando con il tasto destro si esegue uno zoom positivo nella scena 3D, mentre cliccando il tasto sinistro si esegue uno zoom negativo nella scena 3D • salvataggio delle curve in file LaTeX: ` possibile salvare tutte le curve e create fino a quel momento in un file LaTeX il cui contenuto specifico verr` analizzato in seguito a • salvataggio di una/pi` curve in file testuale: ` possibile salvare tutte u e le curve create fino a quel momento in un file .jctxt il cui contenuto specifico verr` analizzato in seguito a Manuel Borile & Alida Palmisano 4
  5. 5. 2 Caratteristiche tecniche e implementazione Come gi` accennato, il software ` scritto in Java con l’ausilio delle librerie a e Java3D. Sulla base delle funzionalit` da implementare, ` risultata opportuna a e la gestione dell’architettura attraverso quattro moduli distinti: 1. gui: contiene la classe per la creazione dell’interfaccia grafica e la ges- tione degli eventi associati ai diversi bottoni/campi di testo/barre di scorrimento/ . . . 2. java3dcurve: contiene tutte le classi che sono dedicate alla costruzione grafica della curva, alla creazione dello spazio di lavoro 3D nel quale le curve saranno visualizzate (albero di scena), alla gestione delle macro funzionalit` dell’applicazione ed il behavior che gestisce gli eventi del a mouse nello spazio 3D (a) dragger: (package contenuto nel modulo “java3dcurve”) contiene le classi per la creazione dei diversi tipi di dragger disponibili 3. fileManagement: contiene le classi che gestiscono il salvataggio e il caricamento delle curve da file 4. theory: contiene le classi che definiscono a livello matematico le varie curve e le funzionalit` di mirroring e stretching delle stesse a Manuel Borile & Alida Palmisano 5
  6. 6. 2.1 Organizzazione delle classi Verranno ora discusse nel dettaglio le classi implementate. Il modulo gui contiene solo la classe MainFrame, il cui scopo ` la creazione e dell’interfaccia grafica dell’intero programma. Il modulo java3dcurve contiene le classi AwtEventBehavior, Curve, DrawingPlane, MirroringPlane, MyBoundingBox, Panel3d e il sotto-package dragger. • AwtEventBehavior: la classe ` l’estensione della superclasse “Behav- e ior”, presente nelle librerie Java3D. Il suo utilizzo ` necessario nella e gestione degli eventi di input da mouse o tastiera. Nello specifico, il metodo “processStimulus()” si occupa di invocare le opportune fun- zioni in seguito ad uno specifico evento. Questa operazione risulta possibile sfruttando le funzionalit` di “Picking” delle librerie Java3D, a che permettono la selezione di un dato oggetto nello spazio: in base al tipo dell’oggetto “pickato” (dragger o curve) e al tipo di movimento in- dividuato (traslazione o rotazione) la funzione richiamer` l’esecuzione a “matematica” delle opportune azioni (per esempio stretching o scaling della curva, o spostamento dei suoi punti di controllo, . . . ) • Curve: la classe ` la naturale trasposizione in codice di una curva para- e metrica. In particolare questa classe definisce tutti i tipi di attributi che caratterizzano univocamente una curva presente nel piano di lavoro. Essendo inoltre un’estensione della classe BranchGroup, essa conterr` a anche una serie di particolari figli (anch’essi BranchGroup) che ne iden- tificano, per esempio, i punti di controllo, il bounding box, le derivate prima e seconda, ecc.. Nello specifico i principali campi contenuti sono i seguenti: – nome curva – tipo curva – numero dei punti di controllo – coordinate dei punti di controllo – valori di N e K (utilizzati solo per le curve di tipo B-Spline) – valori dei coefficienti algebrici per l’equazione parametrica della curva – la geometria della curva (utilizzata dalle librerie di Java3D per la visualizzazione della curva) – risoluzione (quantit` di punti nei quali la curva viene calcolata) a – grossezza linea, colore linea, tipo di linea (tratteggiata/continua/ecc..) Manuel Borile & Alida Palmisano 6
  7. 7. • DrawingPlane: la classe si occupa della creazione dello spazio di lavoro, cio` i piani lungo gli assi x, y, z che aiutano l’utente a posizionare gli e oggetti nello spazio 3D • MirroringPlane: la classe si occupa della creazione del piano di mir- roring che potr` essere utilizzato per creare una copia “specchiata” a della curva stessa • MyBoundingBox: la classe, partendo da un parametro di tipo “Shape3D”, definisce in modo univoco i vertici del bounding box che contiene la curva e procede alla creazione visiva della struttura tridimensionale • Panel3d: la classe ` il ponte fra l’interfaccia grafica e l’esecuzione “ma- e a ` teriale” delle varie funzionalit`. E questa classe che crea l’albero di scena e che gestisce le macro funzionalit`, richiamando poi il metodo a specifico della classe opportuna • package dragger: contiene le classi Dragger, Plane, RotableDragger, StretchDragger – Plane: definisce un semplice piano che viene utilizzato nella fase di picking per permettere il movimento “fluido” dei vari dragger a partire dalla posizione 2D del puntatore del mouse – Dragger: definisce un semplice dragger 3D, che permette cio` lo e spostamento lungo i 3 assi ortogonali – RotableDragger: definisce un dragger, che oltre alle funzionalit` a della classe Dragger, permette la rotazione rispetto ai tre assi – StretchDragger: definisce un dragger dalle caratteristiche simili alla classe Dragger, ma che contiene anche dei particolari attributi necessari alla gestione delle funzionalit` di stretching e scaling a Il modulo fileManagement contiene le seguenti classi: • Saving: la classe gestisce la funzionalit` di salvataggio su file delle a curve create nello spazio di lavoro. In particolare vengono gestiti 3 tipi di salvataggio: 1. salvataggio di una specifica curva in un file di testo (con estensione di default .jctxt) 2. salvataggio di tutte le curve visualizzate in un file di testo 3. salvataggio di tutte le curve visualizzate in un file LaTeX La prima e la seconda tipologia differiscono unicamente per il numero di curve eventualmente salvate. Lo scopo di entrambe le tipologie ` e quello di creare una stampa “letterale” della situazione presente nello spazio di visualizzazione delle curve. Manuel Borile & Alida Palmisano 7
  8. 8. Il formato del file di testo (che pu` contenere i dati di una o pi` curve) o u ` il seguente: e nome della curva tipologia valori di N e K (per le BSpline) risoluzione numero dei punti di controllo coordinate dei vari punti di controllo La terza tipologia di salvataggio prevede un maggior dettaglio nella rappresentazione delle varie curve salvate: in particolare per ogni curva verranno salvati i campi visti precedentemente (cio` i dati che deter- e minano la costruzione matematica della curva) ed una parte generale, con considerazioni aritmetiche sul particolare tipo di curva in esame. Il formato del file pdf (derivante dalla compilazione del file LaTeX creato al momento del salvataggio) ` il seguente: e nome tipologia valori di N e K (per le BSpline) numero dei punti di controllo coordinate dei punti di controllo espressione parametrica della curva valori dei coefficienti algebrici (per le BSpline invece si indicano i valori delle funzioni Ni,k ) considerazioni generali sul tipo di curva   matrice di supporto per il calcolo dei coefficienti  matrice inversa   espressione parametrica generale  indicazione dei range di valori ammessi  • Loading: la classe permette il ripristino di una situazione di lavoro precedentemente salvata in un file testo dalla tipologia 1 e 2. Attraverso il parsing del vari attributi, un metodo della classe procede con la costruzione delle varie curve nello spazio di lavoro 3D. Il modulo theory contiene le classi MathCurves, Mirroring e MyStretching. • MathCurves: la classe contiene tutto ci` che riguarda la teoria delle o curve. Per esempio contiene un metodo che permette il calcolo dei coefficienti algebrici delle curve a partire dai punti di controllo, o un suo metodo che permette la riparametrizzazione della curva, o una funzione che permette il calcolo delle derivate prima e seconda nei vari punti della curva, . . . • Mirroring: la classe gestisce la funzionalit` di mirroring. La moti- a vazione per la quale ` stata inserita nel package “theory” ` proprio e e Manuel Borile & Alida Palmisano 8
  9. 9. perch` sfrutta le formule matematiche del piano e della curva su cui e applicare il mirroring. Una funzione di questa classe crea l’equazione di un piano passante per tre punti nello spazio ed un’altra sua funzione riesce a riflettere uno specifico punto rispetto al piano precedentemente calcolato. • MyStretching: la classe gestisce la funzionalit` di stretching ed ` stata a e inclusa nel package “theory” per lo stesso motivo illustrato per la classe “Mirroring”. In questo caso si sfruttano le coordinate del bounding box e attraverso la risoluzione di un sistema di equazioni, ` possibile e definire una funzione che trasforma le coordinate dei punti di controllo in nuove coordinate che definiscono la curva deformata dall’operazione di stretching. Manuel Borile & Alida Palmisano 9
  10. 10. 3 Manuale utente L’ambiente di lavoro del programma si presenta come in figura 1 (utilizzare preferibilmente la risoluzione dello schermo 1024 x 768 o risoluzioni superiori) Figura 1: Interfaccia grafica del programma Il pannello centrale contiene l’area di lavoro 3D in cui vengono visualiz- zate le curve. Il pannello a sinistra contiene gli strumenti per la modifica del punto di vista (vedi sezione 3.1) I pannelli a destra contengono le informazioni sulle curve presenti nell’area di lavoro e permettono di modificare le informazioni di una curva selezionata (vedi sezione 3.4) Il pannello in alto contiene i bottoni per la gestione di caricamento- salvataggio delle curve (vedi sezione 3.2), i bottoni per la creazione di diversi tipi di curve (vedi sezione 3.3) e i bottoni per la gestione di altre funzionalit` a generali del programma (vedi sezione 3.5) Manuel Borile & Alida Palmisano 10
  11. 11. 3.1 Strumenti per la modifica del punto di vista rotazione del punto di vista: cliccando questo bottone e spo- standosi nell’area di lavoro si pu` osservare che il puntatore ha o modificato la sua forma. Tenendo premuto il tasto sinistro del mouse e trascinando il cursore si osserver` una rotazione del a punto di vista rispetto al centro dei 3 piani. Tenendo, invece, premuto il tasto destro del mouse e trascinando il cursore, si osserver` una traslazione del punto di vista a zoom: cliccando questo bottone e spostandosi nell’area di la- voro si pu` osservare che il puntatore ha modificato la sua o forma. Cliccando con il tasto sinistro del mouse si effettuer` a uno zoom positivo della scena 3D, mentre cliccando con il tasto destro del mouse si effettuer` uno zoom negativo della a scena 3D selezione: cliccando questo bottone e spostandosi nell’area di lavoro si pu` osservare che il puntatore torner` ad assumere la o a classica forma a freccia che consente di selezionare e muovere i vari oggetti presenti nella scena 3D annulla movimenti: cliccando questo bottone ` possibile e ristabilire la posizione iniziale del punto di vista 3.2 Caricamento / Salvataggio di curve carica curve da file testuale: cliccando questo bottone si aprir` la classica finestra di caricamento file, da cui ` possibile a e selezionare, all’interno del proprio hard-disk, un file di testo con il particolare formato illustrato in una delle sezioni prece- denti. Se il file contiene le informazioni corrette, nell’ambiente di lavoro verranno visualizzate le curve 3D salvate al suo inter- no (ovviamente sar` poi possibile modificarle dinamicamente a come spiegato nella sezione 3.4) salva la curva selezionata in file testuale: cliccando questo bottone, se nell’ambiente di lavoro ` stata selezionata una cur- e va particolare, questa potr` essere salvata in un file testuale a utilizzando la classica finestra di salvataggio file (ovviamente ` necessario assegnare un nome al file e, in via opzionale, e un’estensione: se non specificata, l’estensione di default ` e “.jctxt”) Manuel Borile & Alida Palmisano 11
  12. 12. salva tutte le curve in file testuale: questo bottone si compor- ta in modo analogo al bottone per il “salvataggio singolo” ma permette all’utente di salvare tutte le curve correntemente presenti nell’ambiente di lavoro salva tutte le curve in file LaTeX: cliccando questo bottone verranno salvate in un file LaTeX (il cui contenuto specifi- co ` illustrato in una delle sezioni precedenti) tutte le curve e correntemente presenti nell’ambiente di lavoro con le relative informazioni matematiche sulla loro costruzione. Cliccando questo bottone si potr` creare il file LaTeX utilizzando la a classica finestra di salvataggio file (ovviamente ` necessario e assegnare un nome al file e, in via opzionale, un’estensione: se non specificata, l’estensione di default ` “.tex”): compilan- e do poi il file salvato ` possibile ottenere un file in formato pdf e che contiene tutte le informazioni sulle curve disegnate nella scena 3D 3.3 Creazione di una nuova curva Per creare una nuova curva seguire i passi illustati in figura 2 Figura 2: Creazione di una nuova curva 1. cliccare il bottone associato al tipo di curva che si desidera creare (nota: per la creazione delle curve di tipo B-Spline selezionare i valori di N e K desiderati utilizzando le opportune barre di scorrimento); nello spazio 3D verranno visualizzati un numero di dragger 3D pari al numero di punti di controllo della curva desiderata Manuel Borile & Alida Palmisano 12
  13. 13. 2. muovere i punti di controllo fino a quando non hanno raggiunto la posizione desiderata: per muoverli ` sufficiente trascinarli con il mouse e nelle 3 dimensioni utilizzando l’opportuna “maniglia” del dragger 3. quando i punti di controllo si trovano nella posizione desiderata premere il bottone “Draw” in modo da creare la geometria che definisce la curva voluta 4. all’interno dell’ambiente di lavoro sar` visualizzata la curva creata a 5. ed essa verr` aggiunta alla lista di tutte le curve presenti: successiva- a mente, selezionando da questa lista una specifica curva, sar` possibile a modificarne le propriet` (vedi sezione 3.4) a 3.4 Modifica/visualizzazione delle propriet` di una cur- a va Selezionando una curva dall’elenco di tutte le curve presenti e attivando il pannello “Modify” si presenter` la situazione della figura 3 a Figura 3: Modifica delle propriet` di una curva a 1. ` possibile, in maniera dinamica, modificare il nome della curva (scriven- e do il nuovo nome nel campo di testo e premendo il tasto INVIO), la grossezza della linea (agendo sull’opportuna barra), il colore della curva (agendo sul valore di rosso, verde e blu con le barre associate (i valori variano da 0 a 255)), e lo stile della linea (selezionando uno dei 4 stili presenti) Manuel Borile & Alida Palmisano 13
  14. 14. 2. la lista dei punti di controllo contiene i valori delle coordinate tridimen- sionali dei punti di controllo della curva selezionata 3. ` possibile, agendo sulla barra della risoluzione, modificare il numero di e punti in cui viene valutata la curva per essere disegnata: una risoluzione bassa comporta un disegno della curva molto “segmentata” 4. utilizzando questo bottone ` possibile visualizzare/nascondere i dragger e associati ai punti di controllo della curva (da notare che la posizione di questi dragger ` modificabile anche dopo la creazione della curva e e il loro movimento comporter` la modifica dinamica della forma della a curva) 5. utilizzando il pannello “B-Spline”, se la curva selezionata ` di tipo B- e Spline, ` possibile modificare il parametro K della curva e anche il suo e paramatro t Utilizzando i bottoni opportuni, ` possibile visualizzare i valori delle e derivate prima e seconda della curva selezionata (es. figura 4) Figura 4: Derivate prima e seconda Visualizzando, infine, il bounding-box della curva ` possibile agire sui e dragger che sono posizionati sui suoi vertici in modo da modificare liber- amente la forma della curva (vedi figura 5). Trascinando semplicemente i dragger, la curva verr` deformata liberamente lungo la direzione seleziona- a ta: premendo il tasto SHIFT prima del trascinamento (e mantenendolo pre- muto) la deformazione della curva sar` proporzionale (si effettuer`, quindi, a a un’operazione di scaling). Figura 5: Stretching di una curva Manuel Borile & Alida Palmisano 14
  15. 15. 3.4.1 Creazione di una curva speculare Per creare una curva che sia la speculare di una data curva seguire i passi illustrati in figura 6 Figura 6: Creare una curva speculare 1. selezionare la curva di partenza e andare nel pannello “Modify” 2. cliccare il bottone “Mirroring plane”: al centro del piano di lavoro compararir` un piano con un dragger a 3. modificare la posizione del piano utilizzando il dragger: per traslarlo utilizzare le maniglie cilindriche e per ruotarlo agire sulle sfere ai loro estremi 4. quando il piano ` posizionato nel punto desiderato premere il bottone e “Apply mirroring” 5. e apparir` una nuova curva che ` la speculare della curva di partenza a e 3.4.2 Riparametrizzazione di una curva Per riparametrizzare una curva seguire i passi illustrati in figura 7 Figura 7: Riparametrizzazione di una curva Manuel Borile & Alida Palmisano 15
  16. 16. 1. selezionare la curva di partenza e andare nel pannello “Modify” 2. cliccare il bottone “Riparametrize” 3. cliccare due volte sulla curva, posizionando cos` i punti che si desidera ı siano l’inizio e la fine della riparametrizzazione 4. cliccando il bottone “Apply riparam.” la curva verr` troncata nei punti a selezionati e verranno ricaricati i valori dei nuovi punti di controllo della curva tagliata 3.5 Funzionalit` generali a Altre funzionalit` implementate sono: a spostamento di una curva: selezionando una curva dall’elenco di tutte le curve create, si visualizzer` attorno alla curva il a suo bounding-box. A quel punto cliccando sulla curva stessa e mantenendo premuto il tasto sinistro del mouse, ` possibile e trascinare a piacere l’intera curva nello spazio 3D spostamento discreto: cliccando questo bottone si attiver` la a modalit` di spostamento discreto che permette di spostare gli a elementi nella scena 3D (dragger, curve, punti di controllo, . . . ) di intervalli discreti (il valore di questi intervalli discreti ` personalizzabile dall’utente agendo sull’opportuna barra di e scorrimento nel pannello “Modify”) creazione di una copia della curva: cliccando questo bottone si creer` una copia della curva selezionata (ovviamente questa a nuova curva sar` modificabile in modo analogo a tutte le altre a curve e in modo indipendente dalla curva iniziale da cui ` stata e creata) cancellazione di una curva: cliccando questo bottone si elim- iner` la curva correntemente selezionata. Prima di elim- a inare la curva, il programma chiede all’utente la conferma dell’operazione. informazioni sul programma: cliccando questo bottone verr` a visualizzata la classica finestra “About...” contenente le informazioni generali sul software Manuel Borile & Alida Palmisano 16
  17. 17. 4 Formule matematiche In generale, le curve parametriche trattate possono essere espresse tramite una delle seguenti formule: curva di 2◦ grado: p(u) = au2 + bu + c curva di 3◦ grado: p(u) = au3 + bu2 + cu + d curva di 4◦ grado: p(u) = au4 + bu3 + cu2 + du + e dove: • u ` il parametro che, solitamente, varia nell’intervallo [0, 1] e • a, b, c, d, e sono coefficienti algebrici e, per le curve 3D, sono della  i ax forma a =  ay  az Vediamo ora nel dettaglio i diversi tipi di curve implementate. 4.1 Curve di Hermite Coefficienti geometrici: p0 , p1 , p0 , p1   F1 (u) = 2u3 − 3u2 + 1  F2 (u) = −2u3 + 3u2  Funzioni di miscelamento:  F3 (u) = u3 − 2u2 + u  F4 (u) = u3 − u2  Forma geometrica: p(u) = F1 (u)p0 + F2 (u)p1 + F3 (u)p0 + F4 (u)p1 Forma matriciale:      0 0 0 1 a p0  1 1 1 1    p1 b      0 0 1 0   =  c   p0  3 2 1 0 d p1      a 2 −2 1 1 p0  b   −3 3 −2 −1   p1   =    c   0 0 1 0   p0  d 1 0 0 0 p1 Formule per la riparametrizzazione: coefficienti geometrici curva iniziale (parametro u): p i , pj , pi , pj Manuel Borile & Alida Palmisano 17
  18. 18. coefficienti geometrici della curva riparametrizzata (parametro v):   qi = p i   qj = p j  qi , qj , qi , qj dove: uj −ui  qi = vj −vi pi  q = uj −ui p   j vj −vi j 4.2 Curve di Bezier Espressione parametrica generale: n p(u) = pi Bi,n (u) con u ∈ [0, 1] i=0 dove: • n = il grado del polinomio • pi = gli (n+1) punti di controllo • Bi,n (u) = le funzioni di miscelamento date dai polinomi di Bernstein Bi,n (u) = C(n, i)ui (1 − u)n−i n! C(n, i) = i!(n − i)! 4.2.1 Bezier 3 punti 3 punti di controllo → n = 2 Forma geometrica: p(u) = (1 − u)2 p0 + 2u(1 − u)p1 + u2 p2 Forma matriciale coefficienti geometrici/algebrici:      0 0 1 a p0  0 1 1  b  =  p1  2 1 1 1 c p2      a 1 −2 1 p0  b  =  −2 2 0   p1  c 1 0 0 p2 Formule per la riparametrizzazione:   1 0 0 1 1 1 Forma matriciale: p(u) = F P dove F =  4 2 4  0 0 1 Manuel Borile & Alida Palmisano 18
  19. 19. e P ` il vettore dei coefficienti geometrici della curva iniziale (con parametro e che varia tra 0 e 1). I coefficienti geometrici della curva riparametrizzata (q0 , q1 , q2 ) si ricavano dalla seguente operazione:       1 0 0 p(u0 ) q0  − 1 2 − 1  ∗  p(u 1 )  =  q1  2 2 2 0 0 1 p(u1 ) q2 4.2.2 Bezier 4 punti 4 punti di controllo → n = 3 Forma geometrica: p(u) = (1 − u)3 p0 + 3u(1 − u)2 p1 + 3u2 (1 − u)p2 + u3 p3 Forma matriciale coefficienti geometrici/algebrici:      0 0 0 1 a p0  0 0 1 1   b   p1  3  0 1 2 1   c  =  p2       3 3 1 1 1 1 d p3      a −1 3 −3 1 p0  b   3 −6 3 0   p1   =    c   −3 3 0 0   p2  d 1 0 0 0 p3 Formule per la riparametrizzazione:   1 0 0 0  8 4 2 1  Forma matriciale: p(u) = F P dove F =  27 9 9 27   1 2 4 8  27 9 9 27 0 0 0 1 e P ` il vettore dei coefficienti geometrici della curva iniziale (con parametro e che varia tra 0 e 1). I coefficienti geometrici della curva riparametrizzata (q0 , q1 , q2 , q3 ) si rica- vano dalla seguente operazione: p(u0 )      1 0 0 0 q0  − 5 3 − 3 1   p(u 1 )   q1   16 2 3 ∗ 3 =   3 − 3 3 − 5   p(u 2 ) 2 6   q2  3 0 0 0 1 p(u1 ) q3 Manuel Borile & Alida Palmisano 19
  20. 20. 4.2.3 Bezier 5 punti 5 punti di controllo → n = 4 Forma geometrica: p(u) = (1 − u)4 p0 + 4u(1 − u)3 p1 + 6u2 (1 − u)2 p2 + 4u3 (1 − u)p3 + u4 p4 Forma matriciale coefficienti geometrici/algebrici:      0 0 0 0 1 a p0  0 0 0 1 1   b   p1   4      0 0 5 1 1   c  =  p2   3 2      0 1 1 3 1   d   p3  4 2 4 1 1 1 1 1 e p4      a 1 −4 6 −4 1 p0   b     −4 12 −12 4 0   p1      c =   6 −12 6 0 0   p2     d   −4 4 0 0 0   p3  e 1 0 0 0 0 p4 Formule per la riparametrizzazione:   1 0 0 0 0  81 27 27 3 1   256 64 128 64 256  1 1 3 1 1 Forma matriciale: p(u) = F P dove F =   16 4 8 4 16    1 3 27 27 81  256 64 128 64 256 0 0 0 0 1 e P ` il vettore dei coefficienti geometrici della curva iniziale (con parametro e che varia tra 0 e 1). I coefficienti geometrici della curva riparametrizzata (q0 , q1 , q2 , q3 , q4 ) si ricavano dalla seguente operazione:     p(u0 )   1 0 0 0 0 q0  − 13 4 −3 4 − 1   p(u 4 )   q1  1    13 12 3 4        181 − 32 20 − 32 18  ∗  p(u 1 )  =  q2  9 3 9 13   2 4     − 4 3 −3 4 − 13   p(u 3 )   q3  12 4 0 0 0 0 1 p(u1 ) q4 Manuel Borile & Alida Palmisano 20
  21. 21. 4.3 Curve Spline Le curve di tipo Spline interpolano tutti i punti di controllo della curva. 4.3.1 Spline 3 punti 3 punti di controllo → grado della curva interpolante = 2 Forma matriciale coefficienti geometrici/algebrici:      0 0 1 a p0  1 1 1  b  =  p1  4 2 1 1 1 c p2      a 2 −4 2 p0  b  =  −3 4 −1   p1  c 1 0 0 p2 Formule per la riparametrizzazione: coefficienti geometrici della curva riparametrizzata   q0 = p(u0 ) q0 , q1 , q2 dove: q1 = p(u 1 ) 2 q2 = p(u1 )  4.3.2 Spline 4 punti 4 punti di controllo → grado della curva interpolante = 3 Forma matriciale coefficienti geometrici/algebrici:      0 0 0 1 a p0  1 1 1 1   b   p1   27 9 2 3   =    8 4 1   c   p2  27 9 3 1 1 1 1 d p3      a −4.5 13.5 −13.5 4.5 p0  b   9  = −22.5 18 −4.5     p1    c   −5.5 9 −4.5 1   p2  d 1 0 0 0 p3 Formule per la riparametrizzazione: coefficienti geometrici della curva riparametrizzata   q0 = p(u0 )   q = p(u 1 ) 1 q0 , q1 , q2 , q3 dove: 3  q2 = p(u 2 )  3  q3 = p(u1 ) Manuel Borile & Alida Palmisano 21
  22. 22. 4.3.3 Spline 5 punti 5 punti di controllo → grado della curva interpolante = 4 Forma matriciale coefficienti geometrici/algebrici:    0 0 0 0 1 a    1 1 1 1 p0  256 64 16 4 1     p1   b   1 1 1 1  16 27 4 2 1   c  =  p2      8  81 9 3 1  d  256 64 16 4 p3 1 1 1 1 1 e 32 −128 −128 32      a 3 3 64 3 3 p0 −80 224  b   3 96 −128 3 −16   p1  −208 −112    70  22     c = 3 3 76 3 3 p2  −25    16    d   3 16 −12 3 −1   p3  e 1 0 0 0 0 p4 Formule per la riparametrizzazione: coefficienti geometrici della curva riparametrizzata   q0 = p(u0 )   q1 = p(u 1 )    4 q0 , q1 , q2 , q3 , q4 dove: q2 = p(u 1 ) 2  q3 = p(u 3 )    q = p(u 4)   4 1 4.4 B-Spline n p(u) = pj Nj,k (u) j=0 (u−ti )Ni,k−1 (u) (ti+1 −u)Ni+1,k−1 (u) 1 if ti ≤ u < ti+1 Ni,k (u) = ti+k−1 −ti + ti+k −ti+1 Ni,1 (u) = 0 o.w. dove:   0 if i < k • ti sono i nodi caso “non periodico” ti = i − k + 1 if k ≤ i ≤ n n − k + 2 if i > n  • 0≤i≤n+k • tk−1 ≤ u ≤ tn+1 0 • sia consideri che 0 =0 Manuel Borile & Alida Palmisano 22
  23. 23. 4.5 Stretching di una curva La funzionalit` di stretching consiste nella possibilit` di deformare la curva a a nelle tre dimensioni. Per calcolare i nuovi punti di controllo della curva modificata, vengono utilizzate le coordinate dei vertici della bounding box: sulla base di questi punti costruiamo una matrice di trasformazione che consente l’aggiornamento delle coordinate dei punti di controllo e di conseguenza la creazione della nuova curva. Per fare questo sono necessarie 6 coordinate: 3 che identificano i vertici della bounding box prima della modifica e altri 3 che identificano gli stessi vertici dopo la deformazione. Sebbene lo spazio di lavoro sia in 3D, scegliendo opportunamente i ver- tici dal gruppo di 8 punti, riusciamo a ridurre il problema in 2D, facendo comunque attenzione al tipo di coordinate che devono essere inserite nella matrice. Per esempio: dati 3 vertici q1, q2, q3 appartenenti alla bounding box di partenza dati 3 vertici r1, r2, r3 appartenenti alla bounding box deformata se il movimento a cui si ` fatto riferimento durante l’operazione di stretching e va ad agire sull’asse x, il sistema da risolvere sar` cosi composto: a      a11 a12 a1 0 0 0 q1x q2x q3x 0 0 0 r1x  a11 a12 a1 0 0 0    q1y q2y q3y 0 0 0     r2x     a11 a12 a1 0 0 0  1 1 1 0 0 0   r3x    =   0 0 0 a21 a22 a2   0 0 0 q1x q2x q3x   r1y        0 0 0 a21 a22 a2   0 0 0 q1y q2y q3y   r2y  0 0 0 a21 a22 a2 0 0 0 1 1 1 r3y Risolvendolo, si otterranno i valori di a11 , a12 , a21 , a22 , a1 , a2 che possono essere scritti in forma matriciale nel seguente modo: a11 a12 a1 A= a= a21 a22 a2 A questo punto le coordinate dei nuovi punti di controllo (p ) della curva deformata possono essere messi in relazione ai punti di controllo di partenza (p) attraverso la seguente formula: p = Ap + a Naturalmente, nel caso in cui l’operazione di stretching avesse interessato l’asse z, non avremmo dovuto estrarre le coordinate x e y dei punti, bens` le ı coordinate y e z. Manuel Borile & Alida Palmisano 23
  24. 24. 4.5.1 Scaling di una curva La propriet` da garantire in questo caso ` la deformazione uniforme della a e curva, ossia una deformazione che mantenga le proporzioni fra i punti che la compongono. La strategia adottata ` stata quella di eseguire due azioni di e stretching in sequenza, legando di volta in volta due coordinate rispetto al particolare risultato che si vuole ottenere dalla scalatura. Per esempio, supponiamo di voler ingrandire la curva lungo l’asse x: per mantenere le proporzioni vogliamo che la curva cresca anche in altezza (lungo l’asse y). Definiamo quindi un delta che rappresenta lo spostamento lungo l’asse delle ascisse ed eseguiamo un’azione di stretching che allunghi la cur- va: a questo punto eseguiamo nuovamente lo stretching, imponendo per` o un movimento che alzi la curva lungo l’asse y dello stesso delta definito in precedenza. 4.6 Mirroring di una curva rispetto ad un piano Per eseguire il mirroring di una curva rispetto ad un piano ` necessario creare e un piano nello spazio (orientabile a piacimento) e selezionare la curva di partenza: il risultato da ottenere ` il disegno di una nuova curva, identica a e quella di partenza, ma con le coordinate specchiate rispetto al piano. Per fare questo sono state utilizzate alcune formule matematiche ed, in particolare, sono necessari l’equazione aritmetica del piano (equazione che deve corrispondere all’orientamento della geometria posta nello spazio 3D) e un metodo che permettesse di trovare le coordinate speculari rispetto al piano di un dato punto di partenza. Per trovare l’equazione aritmetica del piano ` stata utilizzata la formula e per il calcolo di un piano passante per tre punti dati. Dati R, S, T (punti con coordinate note), dalla definizione dell’equazione del piano ax+by+cz+d = 0 i coefficienti sono calcolabili attraverso i seguenti determinanti: Ry Rz 1 Rz Rx 1 Rx Ry 1 a= Sy S z 1 b= Sz Sx 1 c= S x Sy 1 Ty Sz 1 Tz Tx 1 Tx Ty 1 d = −(aRx + bRy + cRz ) Infine, per trovare le coordinate speculari rispetto al piano di un dato punto di partenza ` stato adottato il seguente procedimento: e   a data l’equazione del piano ax + by + cz + d = 0 e definendo n =  b  c dato un punto P con vettore posizione p, il suo punto speculare rispetto al piano ` Q, con vettore posizione q calcolabile nel seguente modo: e −2(n • p + d) q = p + λn con λ = n•n Manuel Borile & Alida Palmisano 24

×