SECONDO PROGETTO DI INTERFACCE - A.A. 2001-2002 - NUOVO ORDINAMENTO
SECONDO PROGETTO DI RECUPERO
CORSO DI INTERFACCE - A.A. 2001-2002
NUOVO ORDINAMENTO
OBIETTIVO
Realizzare un'interfaccia per una applicazione che costruisce una
gerarchia di quadrati sopra un insieme di punti.
Una gerarchia di quadrati definita da un albero, dove la radice e'
un quadrato che rappresenta il nostro "universo".
Se la radice ha figli, i suoi figli sono i quattro quadrati ottenuti
tracciando le due mediane del quadrato radice.
E cosi' ricorsivamente.
Dato un insieme di punti S contenuto nell'universo, e fissato un
numero K > 0, la gerarchia su S e' una gerarchia tale che:
-
ogni nodo foglia contiene al piu' K punti di S
-
ogni nodo non foglia contiene piu' di K punti di S
La figura mostra un esempio di gerarchia in rappresentazione
ad albero e in rappresentazione planare (disegnando sul piano
i soli quadrati corrispondenti alle foglie).
L'applicazione mantiene un insieme di punti S
e la relativa gerarchia permettendo di modificare S
(aggiungendo o togliendo punti) e di modificare K.
I valori di K consentiti variano nell'intervallo 1..10.
Nella situazione iniziale, l'insieme S e'vuoto, K=1, la
gerarchia e' costituita dal solo quadrato radice.
FUNZIONALITA' DELL'INTERFACCIA
L'interfaccia consentire le seguenti operazioni applicative:
-
Visualizzazione della situazione iniziale dell'applicazione
(insieme S vuoto, gerarchia costituita dal solo quadrato radice)
-
Disegno dell'insieme S di punti da parte dell'utente e sua
visualizzazione
-
Modifica del parametro K da parte dell'utente
(nell'intervallo 1..10)
-
Aggiunta di un punto ad S da parte dell'utente
-
Cancellazione di un punto da S da parte dell'utente
-
Aggiornamento della gerarchia in due possibili modalita':
- in tempo reale ad ogni aggiunta / cancellazione di punto
- differito, su richiesta dell'utente dopo che costui ha
aggiunto / cancellato un numero arbitrario di punti
L'aggiornamento in seguito alla modifica di K e' sempre eseguito
in tempo reale
-
Visualizzazione della rappresentazione planare della gerarchia
con sovrapposti i punti di S
-
Visualizzazione dell'albero livello per livello
con sovrapposti i punti di S
-
Su richiesta dell'utente,
visualizzazione, sovrapposta a quanto gia' visualizzato,
dei punti appena aggiunti a / cancellati da S
(sia nella visualizzazione planare che in quella livello
per livello)
oltre ovviamente alle funzioni standard (uscita ecc.), e a tutte
quelle che ritenete opportune.
La visualizzazione della gerarchia deve essere aggiornata in tempo
reale ad ogni cambiamento della stessa (per inserimento / cancellazione di
punti, per variazione fdi K).
In ogni momento deve essere possibile passare dalla visualizzazione
della rappresentazione planare a quella livello per livello.
Nella visualizzazione livello per livello devono essere
distinti graficamente i nodi foglia da quelli non foglia.
I punti appena aggiunti / cancellati, quando sono visualizzati,
devono essere distinti graficamente dai punti di S.
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) I sorgenti java che implementano l'applicazione
Sono due file:
La classe QuadNode esporta i seguenti metodi pubblici:
-
double getMinX() e double getMinY()
Restituiscono le coordinate dell'angolo di ascissa ed ordinata
minime del quadtrato corrispondente al nodo.
-
double getLevel ()
Restituisce il livello del nodo. La radice ha livello = 1,
i suoi figli livello = 1, e cosi' via.
-
double getMinX() e double getMinY()
Restituiscono le coordinate dell'angolo di ascissa ed ordinata
minime del quadtrato corrispondente al nodo.
-
double getEdgeLength()
Restituisce la lunghezza del lato
del quadtrato corrispondente al nodo.
-
boolean isLeaf()
Restituisce true se e solo se il nodo e' foglia.
Se non e' foglia allora ha 4 figli.
-
QuadNode bottomLeftChild()
QuadNode bottomRightChild()
QuadNode topLeftChild()
QuadNode topRightChild()
Restituiscono i 4 figli del nodo.
Vanno chiamati solo se il nodo non e' foglia.
-
QuadNode parent()
Restituisce il padre del nodo.
E' nullo se il nodo e' la radice.
La classe QuadTree estende QuadNode. Una gerarchia e' anche un nodo
in quanto la gerarchia e' identificata con il suo nodo radice.
Tutti i metodi sopra elencati per QuadNode valgono anche per QuadTree.
In piu', la classe QuadTree esporta i seguenti metodi pubblici:
-
QuadTree (double minX, double minY, double edgeLength)
Inizializza una gerarchia con universo il quadrato con vertice
di x,y minime in (minX,maxX) e lato lungo edgeLength.
L'insieme S e' vuoto e K = 1.
-
Quadtree (String file_name)
Inizializza la gerarchia con K=1,
con un quadrato universo e su un insieme S di punti letti da file.
Tutti i punti devono essere contenuti nell'universo.
Genera un'eccezione se il file non esiste o il formato e' sbagliato.
Il formato del file e' descritto piu' avanti.
-
void prepareToAdd(double x, double y) e
void prepareToRemove(double x, double y)
Registra la richiesta di aggiungere / calcellare il punto
(x,y) senza ancora eseguirla.
-
void prepareToChangeK(int newK)
Registra la richiesta di cambiare il valore di K, dove newK e'
il nuovo valore. Non cambia ancora il valore.
-
void addPoints() e
void removePoints()
Aggiunge / cancella tutti i punti per cui e' stata registrata
una richiesta di aggiunta / cancellazione, ricalcolando la gerarchia.
-
void changeK()
Ricalcola la gerarchia utilizzando il nuovo valore di K
Per il quale e' stata registrata la richiesta.
-
int numRemovedPoints()
Restituisce il numero di punti appena cancellati dalla gerarchia
durante l'ultima operazione di removePoints.
-
int numAddedPoints()
Restituisce il numero di punti appena aggiunti alla gerarchia
durante l'ultima operazione di addPoints.
-
int numUnchangedPoints()
Restituisce il numero di punti che non hanno cambiato stato
(erano e sono rimasti presenti nella gerarchia)
durante l'ultima operazione di addPoints o removePoints.
-
int numAllPoints()
Restituisce il numero totale di punti presenti adesso (added + unchanged).
-
double removedPointX(int i) e double removedPointY(int i)
double addedPointX(int i) e double addedPointY(int i)
double unchangedPointX(int i) e double unchanged PointY(int i)
double pointX(int i) e double pointY(int i)
Restituiscono le coordinate x,y dell'i-esimo fra, rispettivamente, i punti
appena cancellati, i punti appena inseriti, i punti che non hanno cambiato
stato e tutti i punti che sono presenti nella gerarchia.
(2) File di input
Il formato del file e' il seguente:
minX minY edgeLength
N
x1 y1
x2 y2
...
xN yN
dove minX,minY sono le coordinate dell'angolo
di x ed y minime del quadrato universo,
edgeLength e' la lunghezza del lato dell'universo,
N e' il numero di punti di S e
xi,yi sono le coordinate dell'i-esimo punto.
Sono dati due file come esempio, altri ne potete scrivere voi:
CONSIGLI E RACCOMANDAZIONI
La classe QuadTree contiene un "main" che costruisce una gerarchia
leggendo un insieme di punti da file 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.