SECONDO PROGETTO DI INTERFACCE - A.A. 2001-2002 - NUOVO ORDINAMENTO
SECONDO PROGETTO DI INTERFACCE - A.A. 2001-2002
NUOVO ORDINAMENTO
OBIETTIVO
Realizzare un'interfaccia per una applicazione che consente di
scomporre l'interno di un poligono semplice in triangoli
(triangolazione di un poligono semplice).
L'algoritmo usato nell'applicazione e' iterativo e genera i
triangoli uno alla volta. Ad ogni passo esamina una terna di
vertici del poligono. Se il triangolo definito da quei tre
vertici cade completamente all'interno del poligono e non
interseca altri triangoli gia' creati, allora crea il triangolo
e lo aggiunge alla triangolazione. Prosegue finche' il poligono
non e' stato completamente riempito da triangoli.
FUNZIONALITA' DELL'INTERFACCIA
L'interfaccia deve consentire le seguenti operazioni applicative:
-
Disegno del poligono da parte dell'utente.
-
Visualizzazione del poligono e della triangolazione (la quale
puo' essere ancora incompleta ved. anche sotto).
La grafica usata deve distinguere i lati del poligono dai lati dei
triangoli creati.
-
Esecuzione dell'algoritmo di triangolazione in modalita' diretta
oppure a scorrimento manuale.
-
Modalita' diretta: calcola la triangolazione e la visualizza
direttamente
-
Modalita' a scorrimento manuale: esegue un passo dell'algoritmo (esame di
una terna di vertici, che puo' generare un nuovo triangolo oppure no)
e visualizza il risultato intermedio.
L'utente deve poi intervenire per ichiedere di eseguire
il passo successivo, e cosi' via fino al completamento.
oltre ovviamente alle funzioni standard (uscita ecc.), e a tutte
quelle che ritenete opportune.
In ogni momento deve essere possibile:
-
passare dalla modalita a scorrimento manuale alla modalita' diretta
(esecuzione di tutti i restanti passi e visualizzazione del risultato
finale).
-
cancellare il poligono presente (azzerando un'eventuale esecuzione
a scorrimento che fosse in corso)
Nelle modalita' di scorrimento ad ogni passo vanno evidenziati:
- la terna di punti ovvero il triangolo candidato ad essere creato
- il nuovo triangolo (se viene creato)
eventualmente anche articolando un singolo passo in diverse schermate.
Per le parti non specificate e' lasciata piena liberta' di scelta,
purche' l'interfaccia risultante si comporti in modo ragionevole e
prevedibile.
MATERIALE FORNITO
(1) Il sorgente java che implementa l'applicazione
TriPolig.java
La classe principale e' la classe TriPolig, che esporta i seguenti
metodi pubblici:
-
TriPolig (int[] x, int[] y, int n) e
TriPolig (double[] x, double[] y, int n)
Inizializza il triangolatore su un poligono di n lati (n>=3), le cui
coordinate dei vertici sono contenute nei due array x ed y.
Le coordinate dell'i-esimo vertice sono dunque x[i] e y[i].
Importante: i vertici devono essere elencati scorrendo il contorno
del poligono in senso antiorario.
-
TriPolig (String file_name)
Inizializza il triangolatore su un poligono letto da file.
Il formato del file e' il seguente:
N
x1 y1
x2 y2
...
xN yN
done N e' il numero di vertici del poligono e
xi,yi sono le coordinate dell'i-esimo vertice.
I vertici devono essere almeno 3 ed essere dati in senso antiorario.
Genera un'eccezione se il file non esiste o il formato e' sbagliato.
-
int firstIntX() e double firstX()
int firstIntY() e double firstY()
int secondIntX() e double secondX()
int secondIntY() e double secondY()
int thirdIntX() e double thirdX()
int thirdIntY() e double thirdY()
Restituiscono le coordinate x ed y dei tre vertici candidati a formare
il nuovo triangolo.
Alla fine dell'algoritmo (triangolazione completa) restituiscono i
vertici dell'ultimo triangolo creato.
-
int numPolygonPoints()
Restituisce il numero di vertici del poligono. E' sempre >=3.
-
int getIntPointX(int i) e double getPointX(int i)
int getIntPointY(int i) e double getPointY(int i)
Restituiscono le coordinate x ed y del vertice i-esimo del poligono.
-
int numHolePoints()
Restituisce il numero di vertici della parte di poligono non ancora
riempita con triangoli. Finche' questo numero e' >=3 il processo di
triangolazione non e' terminato.
-
int numTriangles()
Restituisce il numero di triangoli creati finora. A triangolazione
completata questi sono pari a n-2 se il poligono ha n vertici.
-
int[] getIntTriangleX(int i) e double[] getTriangleX(int i)
int[] getIntTriangleY(int i) e double[] getTriangleY(int i)
Restituiscono in array di tre elementi le coordinate x ed y dei tre
vertici del triangolo i-esimo.
-
boolean tryReducingHole()
Controlla la prossima terna di punti canditati a creare un triangolo e,
se e' possibile, crea un triangolo e restringe la parte di poligono ancora
da triangolare. Ritorna true se solo se ha creato un triangolo.
-
void triangulate()
Triangola il poligono.
(2) File di input
CONSIGLI E RACCOMANDAZIONI
La classe TriPolig contiene un "main" che legge un poligono e gestisce
l'eccezione derivante da file inesistente o con formato sbagliato.
Guardare il codice per gestire l'eccezione in modo analogo.
Questo e' un progetto di interfacce grafiche. Pertanto, sara' tenuto conto
non solo del fatto che tutte le funzioni richieste siano presenti
nell'interfaccia sviluppata, ma anche e di quanto facile e gradevole risulta
l'uso dell'interfaccia stessa per l'utente.
MATERIALE DA CONSEGNARE
Le sorgenti java, su dischetto o per email.
Solo se lo si ritiene necessario, brevissime istruzioni per l'uso
dell'interfaccia, in testo ascii o html, su dischetto o per email.
L'indirizzo di posta elettronica a cui spedire e'
magillo@disi.unige.it.
Indicare chiaramente nel messaggio il nome dei componenti del gruppo e
l'elenco dei file inviati.