Progetto Algoritmi Geometrici A.A. 2003-2004
Integrazione al testo per chi svolge il
progetto in Java
Specifica
Il codice dovra' essere scritto in Java realizzando una
classe che implementi l'interfaccia
TriLibrary fornita.
L'interfaccia TriLibrary
ingloba tutte le funzioni elencate nella specifica data
nella versione C del testo del progetto.
In altre parole dovete realizzare una classe la cui intestazione inizi con:
class MyTriangulation implements Trilibrary
{ ... }
La sintassi per i file contenenti triangolazioni e' la stessa
definita per la versione C.
E' dato il file TriLibrary.java
contenente l'interfaccia TriLibrary.
Non e' permesso modificare l'interfaccia.
Visualizzazione
Viene fornito un programma grafico che
permettera' di visualizzare
i risultati e controllare che siano corretti.
Il programma fa uso delle classi di Java AWT.
Consiste di due classi:
- TriPanel che definisce un pannello in grado di visualizzare
una triangolazione e reagire all'interazione dell'utente
su di essa (l'utente invoca le operazioni di interrogazione e di
modifica cliccando su parti della triangolazione visualizzata).
- TriGraph che definisce l'interfaccia complessiva
Siccome il programma per funzionare
ha bisogno di un oggetto di una classe che
implementa l'interfaccia TriLibrary,
viene fornita nella classe TriDummy un'implementazione
"stupida".
Un oggetto di classe TriDummy codifica
una triangolazione prefissata (quella del file di esempio
es1.txt)
e implementa tutte le funzioni di modifica senza fare nulla, ma
stampando un messaggio su standard output.
La classe TriGraph contiene il main.
Il main presente nella versione fornita fa uso di un oggetto appartenente
alla classe TriDummy.
Dovrete sostituirlo con un oggetto della vostra classe
triangolazione.
Sono dati i file:
Funzionalita' del programma
Le funzionalita' del programma di grafico
sono analoghe a quelle del visualizzatore fornito nella
versione C..
L'unica differenza e' che l'interfaccia e' un po' piu' amichevole.
Presenta un'unica finestra nella quale avviene il disegno della
triangolazione, mentre in alto ci sono alcuni controlli:
- bottone carica carica una triangolazione chiedendo
il nome del file
- bottone salva salva una triangolazione chiedendo
il nome del file
- dispositivo di scelta, inizialmente impostato a
mostra numero, la cui funzione e' spiegata piu' avanti
- bottone annulla operazione annulla l'operazione in corso,
se per caso vi si bloccasse il programma provate a premerlo,
puo' darsi che sia rimasto in attesa di parametri per
una qualche operazione
- bottone esci termina l'esecuzione del programna
Il dispositivo di scelta, a seconda della scelta impostata,
determina l'effetto delle azioni dell'utente sulla triangolazione:
-
mostra numeri
in questa modalita' cliccare col mouse sopra un
vertice, spigolo o triangolo mostra il suo numero (per uno spigolo,
i numeri dei suoi vertici),
per i vertici viene anche evidenziato il numero del triangolo
nella relazione VT parziale
-- questa e' la modalita' di default
-
mostra V
in questa modalita' cliccare col mouse sopra un
vertice, spigolo o triangolo
evidenzia i vertici ad esso collegati
mediante la relazione VV, VE o TV (a seconda del caso),
cliccare sullo sfondo evidenzia i vertici della faccia esterna
-
mostra T
in questa modalita' cliccare col mouse sopra un
vertice, spigolo o triangolo evidenzia i triangoli ad esso collegati
mediante la relazione VT, ET o TT (a seconda del caso)
-
mostra E
in questa modalita' cliccare col mouse sopra uno
spigolo evidenzia gli spigoli ad esso collegati
mediante la relazione EE
-
mostra V e T
in questa modalita' cliccare col mouse sopra un
vertice, spigolo o triangolo evidenzia sia i vertici che i triangoli
ad esso collegati
-
raffina
in questa modalita' cliccare col mouse sopra un
vertice o triangolo ha il seguente effetto:
-
se si clicca su un triangolo, viene invocata l'operazione
TriangleSplit di quel triangolo nel punto dato
dalla posizione del mouse
-
se si clicca su uno spigolo, viene invocata l'operazione
EdgeSplit di quello spigolo nel punto dato
dalla posizione del mouse
-
se si clicca su un vertice, viene invocata l'operazione
VertexSplit di quel vertice, in questo caso
all'utente e' richiesto di cliccare in altri due punti che
saranno gli estremi dello spigolo risultante
(l'utente avra' cura di posizionare i punti in modo ammissibile)
e di selezionare tramite click due spigoli che dovranno essere
espansi in triangoli
(l'utente avra' cura di scegliere una coppia di spigoli ammissibile)
-
se si clicca sullo sfondo (faccia esterna), viene invocata l'operazione
AddEar, in questo caso
all'utente e' richiesto di selezionare tramite click uno spigolo
(l'utente avra' cura di scegliere uno spigolo di bordo e ammissibile)
-
semplifica
in questa modalita' cliccare col mouse
ha il seguente effetto:
-
se si clicca su un vertice interno con esattamente tre
triangoli incidenti, oppure su un vertice di bordo con esattamente un
triangolo incidente, viene invocata l'operazione
VertexDelete per cancellare quel vertice
-
se si clicca su un vertice interno con esattamente quattro
triangoli incidenti, oppure sul bordo con esattamente due
triangoli incidenti, viene invocata l'operazione
EdgeMerge per cancellare quel vertice, in questo caso
all'utente e' richiesto di selezionare tramite click
due spigoli incidenti, che dovranno essere fusi
(l'utente avra' cura di selezionare una coppia di
spigoli ammissibile)
-
se si clicca su uno spigolo viene invocata l'operazione
EdgeCollapse per collassare quello spigolo,
il vertice risultante viene posto alla posizione del mouse
-
scambia
in questa modalita' cliccare col mouse su uno
spigolo invocata l'operazione EdgeSwap su quello spigolo
La modalita' corrente come anche altri messaggi (sull'esito
con successo o errore dell'operazione, ecc.) sono mostrati
in basso nella finestra.
Le convenzioni grafiche usate
sono le stesse che per la versione C.