SlideShare ist ein Scribd-Unternehmen logo
1 von 24
Downloaden Sie, um offline zu lesen
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
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
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
• 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
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
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
• 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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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

Weitere ähnliche Inhalte

Ähnlich wie JCurves

Modellazione della dinamica di un liquido bifase mediante GPU CUDA
Modellazione della dinamica di un liquido bifase mediante GPU CUDAModellazione della dinamica di un liquido bifase mediante GPU CUDA
Modellazione della dinamica di un liquido bifase mediante GPU CUDAkylanee
 
24546913 progettazione-e-implementazione-del-sistema-di-controllo-per-un-pend...
24546913 progettazione-e-implementazione-del-sistema-di-controllo-per-un-pend...24546913 progettazione-e-implementazione-del-sistema-di-controllo-per-un-pend...
24546913 progettazione-e-implementazione-del-sistema-di-controllo-per-un-pend...maaske
 
Stato della normativa sugli ingranaggi
Stato della normativa sugli ingranaggiStato della normativa sugli ingranaggi
Stato della normativa sugli ingranaggiTogetherToSolve
 
Relazione_CPD2_DavideSito
Relazione_CPD2_DavideSitoRelazione_CPD2_DavideSito
Relazione_CPD2_DavideSitoDavide Sito
 
Riconfigurazione automatica di processi di asportazione in termini di Network...
Riconfigurazione automatica di processi di asportazione in termini di Network...Riconfigurazione automatica di processi di asportazione in termini di Network...
Riconfigurazione automatica di processi di asportazione in termini di Network...Giovanni Casabianca
 
Reti neurali di convoluzione per la visione artificiale - Tesi di Laurea Magi...
Reti neurali di convoluzione per la visione artificiale - Tesi di Laurea Magi...Reti neurali di convoluzione per la visione artificiale - Tesi di Laurea Magi...
Reti neurali di convoluzione per la visione artificiale - Tesi di Laurea Magi...Daniele Ciriello
 
Esercizi di programmazione in C (v. 2.01)
Esercizi di programmazione in C (v. 2.01)Esercizi di programmazione in C (v. 2.01)
Esercizi di programmazione in C (v. 2.01)Fulvio Corno
 
Valutazione sperimentale di tecnologie per la gestione dei dati per workflow ...
Valutazione sperimentale di tecnologie per la gestione dei dati per workflow ...Valutazione sperimentale di tecnologie per la gestione dei dati per workflow ...
Valutazione sperimentale di tecnologie per la gestione dei dati per workflow ...Francesco De Giorgi
 
Ponte lambro dossier aprile 2011 def
Ponte lambro dossier aprile 2011 defPonte lambro dossier aprile 2011 def
Ponte lambro dossier aprile 2011 defMarco Garoffolo
 
Tesi Triennale - Grid Credit System: un portale per la sostenibilità di COMPCHEM
Tesi Triennale - Grid Credit System: un portale per la sostenibilità di COMPCHEMTesi Triennale - Grid Credit System: un portale per la sostenibilità di COMPCHEM
Tesi Triennale - Grid Credit System: un portale per la sostenibilità di COMPCHEMDavide Ciambelli
 
Sviluppo e confronto di tecniche di stima della traiettoria di sensori 3D
Sviluppo e confronto di tecniche di stima della traiettoria di sensori 3D Sviluppo e confronto di tecniche di stima della traiettoria di sensori 3D
Sviluppo e confronto di tecniche di stima della traiettoria di sensori 3D Andrea Bidinost
 
Telecontrollo di un sistema cartesiano a 2 g.d.l. mediante interfaccia aptica...
Telecontrollo di un sistema cartesiano a 2 g.d.l. mediante interfaccia aptica...Telecontrollo di un sistema cartesiano a 2 g.d.l. mediante interfaccia aptica...
Telecontrollo di un sistema cartesiano a 2 g.d.l. mediante interfaccia aptica...GabrieleGandossi
 
mastertesi
mastertesimastertesi
mastertesiReply
 
Simulazione di un sistema fisico ts inginf
Simulazione di un sistema fisico ts inginfSimulazione di un sistema fisico ts inginf
Simulazione di un sistema fisico ts inginfIonutAlexandruPascar
 
Costruzione di un pendolo inverso e implementazione del sistema di controllo
Costruzione di un pendolo inverso e implementazione del sistema di controlloCostruzione di un pendolo inverso e implementazione del sistema di controllo
Costruzione di un pendolo inverso e implementazione del sistema di controlloIgor Valic
 

Ähnlich wie JCurves (20)

Tesi
TesiTesi
Tesi
 
Modellazione della dinamica di un liquido bifase mediante GPU CUDA
Modellazione della dinamica di un liquido bifase mediante GPU CUDAModellazione della dinamica di un liquido bifase mediante GPU CUDA
Modellazione della dinamica di un liquido bifase mediante GPU CUDA
 
24546913 progettazione-e-implementazione-del-sistema-di-controllo-per-un-pend...
24546913 progettazione-e-implementazione-del-sistema-di-controllo-per-un-pend...24546913 progettazione-e-implementazione-del-sistema-di-controllo-per-un-pend...
24546913 progettazione-e-implementazione-del-sistema-di-controllo-per-un-pend...
 
Stato della normativa sugli ingranaggi
Stato della normativa sugli ingranaggiStato della normativa sugli ingranaggi
Stato della normativa sugli ingranaggi
 
Relazione_CPD2_DavideSito
Relazione_CPD2_DavideSitoRelazione_CPD2_DavideSito
Relazione_CPD2_DavideSito
 
Riconfigurazione automatica di processi di asportazione in termini di Network...
Riconfigurazione automatica di processi di asportazione in termini di Network...Riconfigurazione automatica di processi di asportazione in termini di Network...
Riconfigurazione automatica di processi di asportazione in termini di Network...
 
Reti neurali di convoluzione per la visione artificiale - Tesi di Laurea Magi...
Reti neurali di convoluzione per la visione artificiale - Tesi di Laurea Magi...Reti neurali di convoluzione per la visione artificiale - Tesi di Laurea Magi...
Reti neurali di convoluzione per la visione artificiale - Tesi di Laurea Magi...
 
Esercizi di programmazione in C (v. 2.01)
Esercizi di programmazione in C (v. 2.01)Esercizi di programmazione in C (v. 2.01)
Esercizi di programmazione in C (v. 2.01)
 
Valutazione sperimentale di tecnologie per la gestione dei dati per workflow ...
Valutazione sperimentale di tecnologie per la gestione dei dati per workflow ...Valutazione sperimentale di tecnologie per la gestione dei dati per workflow ...
Valutazione sperimentale di tecnologie per la gestione dei dati per workflow ...
 
Ponte lambro dossier aprile 2011 def
Ponte lambro dossier aprile 2011 defPonte lambro dossier aprile 2011 def
Ponte lambro dossier aprile 2011 def
 
Grafica
GraficaGrafica
Grafica
 
domenicoCaputiTriennale
domenicoCaputiTriennaledomenicoCaputiTriennale
domenicoCaputiTriennale
 
Tesi Triennale - Grid Credit System: un portale per la sostenibilità di COMPCHEM
Tesi Triennale - Grid Credit System: un portale per la sostenibilità di COMPCHEMTesi Triennale - Grid Credit System: un portale per la sostenibilità di COMPCHEM
Tesi Triennale - Grid Credit System: un portale per la sostenibilità di COMPCHEM
 
Sviluppo e confronto di tecniche di stima della traiettoria di sensori 3D
Sviluppo e confronto di tecniche di stima della traiettoria di sensori 3D Sviluppo e confronto di tecniche di stima della traiettoria di sensori 3D
Sviluppo e confronto di tecniche di stima della traiettoria di sensori 3D
 
Telecontrollo di un sistema cartesiano a 2 g.d.l. mediante interfaccia aptica...
Telecontrollo di un sistema cartesiano a 2 g.d.l. mediante interfaccia aptica...Telecontrollo di un sistema cartesiano a 2 g.d.l. mediante interfaccia aptica...
Telecontrollo di un sistema cartesiano a 2 g.d.l. mediante interfaccia aptica...
 
mastertesi
mastertesimastertesi
mastertesi
 
a4_centrata
a4_centrataa4_centrata
a4_centrata
 
Costruzioni metalliche - Di Re
Costruzioni metalliche - Di ReCostruzioni metalliche - Di Re
Costruzioni metalliche - Di Re
 
Simulazione di un sistema fisico ts inginf
Simulazione di un sistema fisico ts inginfSimulazione di un sistema fisico ts inginf
Simulazione di un sistema fisico ts inginf
 
Costruzione di un pendolo inverso e implementazione del sistema di controllo
Costruzione di un pendolo inverso e implementazione del sistema di controlloCostruzione di un pendolo inverso e implementazione del sistema di controllo
Costruzione di un pendolo inverso e implementazione del sistema di controllo
 

Mehr von graphitech

A graphic library and an application for simple curve manipolation
A graphic library and an application for simple curve manipolationA graphic library and an application for simple curve manipolation
A graphic library and an application for simple curve manipolationgraphitech
 
A graphic library and an application for simple curve manipolation
A graphic library and an application for simple curve manipolationA graphic library and an application for simple curve manipolation
A graphic library and an application for simple curve manipolationgraphitech
 
A graphic library and an application for simple curve manipolation
A graphic library and an application for simple curve manipolationA graphic library and an application for simple curve manipolation
A graphic library and an application for simple curve manipolationgraphitech
 
A graphic library and an application for simple curve manipolation
A graphic library and an application for simple curve manipolationA graphic library and an application for simple curve manipolation
A graphic library and an application for simple curve manipolationgraphitech
 
Rescue Mission
Rescue MissionRescue Mission
Rescue Missiongraphitech
 
Rescue Mission
Rescue MissionRescue Mission
Rescue Missiongraphitech
 
Mashup - Sustainability
Mashup - SustainabilityMashup - Sustainability
Mashup - Sustainabilitygraphitech
 
Mashup - Sustainability
Mashup - SustainabilityMashup - Sustainability
Mashup - Sustainabilitygraphitech
 
Multiple Screens
Multiple ScreensMultiple Screens
Multiple Screensgraphitech
 
Multiple Screens
Multiple ScreensMultiple Screens
Multiple Screensgraphitech
 
Graph Matching
Graph MatchingGraph Matching
Graph Matchinggraphitech
 
Shape Analysis
Shape AnalysisShape Analysis
Shape Analysisgraphitech
 
Human Interaction Library
Human Interaction LibraryHuman Interaction Library
Human Interaction Librarygraphitech
 
Human Interaction Library
Human Interaction LibraryHuman Interaction Library
Human Interaction Librarygraphitech
 
WebCams Mapping on Nasa World Wind
WebCams Mapping on Nasa World WindWebCams Mapping on Nasa World Wind
WebCams Mapping on Nasa World Windgraphitech
 
Street Builder
Street BuilderStreet Builder
Street Buildergraphitech
 
Street Builder
Street BuilderStreet Builder
Street Buildergraphitech
 
Live Video in World Wind
Live Video in World WindLive Video in World Wind
Live Video in World Windgraphitech
 
Live Video in World Wind
Live Video in World WindLive Video in World Wind
Live Video in World Windgraphitech
 
Terrain Modification
Terrain ModificationTerrain Modification
Terrain Modificationgraphitech
 

Mehr von graphitech (20)

A graphic library and an application for simple curve manipolation
A graphic library and an application for simple curve manipolationA graphic library and an application for simple curve manipolation
A graphic library and an application for simple curve manipolation
 
A graphic library and an application for simple curve manipolation
A graphic library and an application for simple curve manipolationA graphic library and an application for simple curve manipolation
A graphic library and an application for simple curve manipolation
 
A graphic library and an application for simple curve manipolation
A graphic library and an application for simple curve manipolationA graphic library and an application for simple curve manipolation
A graphic library and an application for simple curve manipolation
 
A graphic library and an application for simple curve manipolation
A graphic library and an application for simple curve manipolationA graphic library and an application for simple curve manipolation
A graphic library and an application for simple curve manipolation
 
Rescue Mission
Rescue MissionRescue Mission
Rescue Mission
 
Rescue Mission
Rescue MissionRescue Mission
Rescue Mission
 
Mashup - Sustainability
Mashup - SustainabilityMashup - Sustainability
Mashup - Sustainability
 
Mashup - Sustainability
Mashup - SustainabilityMashup - Sustainability
Mashup - Sustainability
 
Multiple Screens
Multiple ScreensMultiple Screens
Multiple Screens
 
Multiple Screens
Multiple ScreensMultiple Screens
Multiple Screens
 
Graph Matching
Graph MatchingGraph Matching
Graph Matching
 
Shape Analysis
Shape AnalysisShape Analysis
Shape Analysis
 
Human Interaction Library
Human Interaction LibraryHuman Interaction Library
Human Interaction Library
 
Human Interaction Library
Human Interaction LibraryHuman Interaction Library
Human Interaction Library
 
WebCams Mapping on Nasa World Wind
WebCams Mapping on Nasa World WindWebCams Mapping on Nasa World Wind
WebCams Mapping on Nasa World Wind
 
Street Builder
Street BuilderStreet Builder
Street Builder
 
Street Builder
Street BuilderStreet Builder
Street Builder
 
Live Video in World Wind
Live Video in World WindLive Video in World Wind
Live Video in World Wind
 
Live Video in World Wind
Live Video in World WindLive Video in World Wind
Live Video in World Wind
 
Terrain Modification
Terrain ModificationTerrain Modification
Terrain Modification
 

Kürzlich hochgeladen

La produzione e la gestione degli Open Data
La produzione e la gestione degli Open DataLa produzione e la gestione degli Open Data
La produzione e la gestione degli Open DataGianluigi Cogo
 
Storia dell’Inghilterra nell’Età Moderna.pptx
Storia dell’Inghilterra nell’Età Moderna.pptxStoria dell’Inghilterra nell’Età Moderna.pptx
Storia dell’Inghilterra nell’Età Moderna.pptxOrianaOcchino
 
IL CHIAMATO ALLA CONVERSIONE - catechesi per candidati alla Cresima
IL CHIAMATO ALLA CONVERSIONE - catechesi per candidati alla CresimaIL CHIAMATO ALLA CONVERSIONE - catechesi per candidati alla Cresima
IL CHIAMATO ALLA CONVERSIONE - catechesi per candidati alla CresimaRafael Figueredo
 
biblioverifica ijf24 Festival Internazionale del Giornalismo 2024
biblioverifica ijf24 Festival Internazionale del Giornalismo 2024biblioverifica ijf24 Festival Internazionale del Giornalismo 2024
biblioverifica ijf24 Festival Internazionale del Giornalismo 2024Damiano Orru
 
Terza cultura w la scienza Italo Calvino.pdf
Terza cultura w la scienza Italo Calvino.pdfTerza cultura w la scienza Italo Calvino.pdf
Terza cultura w la scienza Italo Calvino.pdfPierLuigi Albini
 
Esame finale - riunione genitori 2024.pptx
Esame finale - riunione genitori 2024.pptxEsame finale - riunione genitori 2024.pptx
Esame finale - riunione genitori 2024.pptxfedericodellacosta2
 
Ticonzero news 148.pdf aprile 2024 Terza cultura
Ticonzero news 148.pdf aprile 2024 Terza culturaTiconzero news 148.pdf aprile 2024 Terza cultura
Ticonzero news 148.pdf aprile 2024 Terza culturaPierLuigi Albini
 
La seconda guerra mondiale per licei e scuole medie
La seconda guerra mondiale per licei e scuole medieLa seconda guerra mondiale per licei e scuole medie
La seconda guerra mondiale per licei e scuole medieVincenzoPantalena1
 

Kürzlich hochgeladen (8)

La produzione e la gestione degli Open Data
La produzione e la gestione degli Open DataLa produzione e la gestione degli Open Data
La produzione e la gestione degli Open Data
 
Storia dell’Inghilterra nell’Età Moderna.pptx
Storia dell’Inghilterra nell’Età Moderna.pptxStoria dell’Inghilterra nell’Età Moderna.pptx
Storia dell’Inghilterra nell’Età Moderna.pptx
 
IL CHIAMATO ALLA CONVERSIONE - catechesi per candidati alla Cresima
IL CHIAMATO ALLA CONVERSIONE - catechesi per candidati alla CresimaIL CHIAMATO ALLA CONVERSIONE - catechesi per candidati alla Cresima
IL CHIAMATO ALLA CONVERSIONE - catechesi per candidati alla Cresima
 
biblioverifica ijf24 Festival Internazionale del Giornalismo 2024
biblioverifica ijf24 Festival Internazionale del Giornalismo 2024biblioverifica ijf24 Festival Internazionale del Giornalismo 2024
biblioverifica ijf24 Festival Internazionale del Giornalismo 2024
 
Terza cultura w la scienza Italo Calvino.pdf
Terza cultura w la scienza Italo Calvino.pdfTerza cultura w la scienza Italo Calvino.pdf
Terza cultura w la scienza Italo Calvino.pdf
 
Esame finale - riunione genitori 2024.pptx
Esame finale - riunione genitori 2024.pptxEsame finale - riunione genitori 2024.pptx
Esame finale - riunione genitori 2024.pptx
 
Ticonzero news 148.pdf aprile 2024 Terza cultura
Ticonzero news 148.pdf aprile 2024 Terza culturaTiconzero news 148.pdf aprile 2024 Terza cultura
Ticonzero news 148.pdf aprile 2024 Terza cultura
 
La seconda guerra mondiale per licei e scuole medie
La seconda guerra mondiale per licei e scuole medieLa seconda guerra mondiale per licei e scuole medie
La seconda guerra mondiale per licei e scuole medie
 

JCurves

  • 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. 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. 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. • 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. 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. 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. • 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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