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:

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:

  1. Visualizzazione della situazione iniziale dell'applicazione (insieme S vuoto, gerarchia costituita dal solo quadrato radice)

  2. Disegno dell'insieme S di punti da parte dell'utente e sua visualizzazione

  3. Modifica del parametro K da parte dell'utente (nell'intervallo 1..10)

  4. Aggiunta di un punto ad S da parte dell'utente

  5. Cancellazione di un punto da S da parte dell'utente

  6. Aggiornamento della gerarchia in due possibili modalita': L'aggiornamento in seguito alla modifica di K e' sempre eseguito in tempo reale

  7. Visualizzazione della rappresentazione planare della gerarchia con sovrapposti i punti di S

  8. Visualizzazione dell'albero livello per livello con sovrapposti i punti di S

  9. 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:

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:

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