Corso di Interfacce Utente - A.A. 2003-2004

PROGETTO DI LABORATORIO DI RECUPERO

Descrizione dell'applicazione e requisiti dell'interfaccia

  1. Scopo dell'esercitazione
  2. Descrizione dell'applicazione
  3. Classi che implementano l'applicazione
  4. Specifiche per l'interfaccia

Scopo dell'esercitazione

Realizzare un'interfaccia per una applicazione che costruisce una una gerarchia di quadrati annidati (chiamata "QuadTree") per un insieme di punti.
Un QuadTree e' una struttura geometrica nel piano, percio' l'interfaccia avra', oltre alla parte di controllo, una parte di grafica bidimensionale.

L'applicazione viene data gia' fatta. La descrizione dell'applicazione e delle classi che la implementano (punti 2 e 3 di questo documento) sono illustrazione di cosa gia' esistente pronta per essere usata.
Voi dovrete invece prima progettare e poi implementare l'interfaccia per l'applicazione, seguendo le specifiche (punto 4 di questo documento).

Descrizione dell'applicazione

Nozioni teoriche

Sono assegnati:

Il QuadTree e' una partizione dell'universo in quadrati all'interno dei quali sono memorizzati i punti di S. La partizione e' costruita in questo modo:

La figura mostra un esempio di QuadTree che memorizza un insieme di punti, supponendo capacita' K=2.

Che cosa fa l'applicazione

L'applicazione contiene strutture dati ed algoritmi che permettono di:

L'aggiunta e l'eliminazione di un punto consistono in due fasi, da eseguire strettamente in sequenza:

  1. fase "try": tenta di eseguire la modifica, controlla se si puo' fare.
  2. fase "do": se il tentativo ha avuto successo, esegue veramente la modifica sul QuadTree; se invece il tentativo e' fallito non fa nulla.
Queste due fasi serviranno nell'interfaccia per mostrare l'anteprima della modifica, e anche per sapere se una modifica e' permessa.

Classi che implementano l'applicazione

Vengono date le classi

QuadNode e' superclasse di QuadTree.

Classe QuadNode

Per quanto ci riguarda, rappresenta un quadrato della partizione.

Creazione:
Non c'e' modo di creare un quadnode dall'esterno. Vengono creati solo all'interno dell'implementazione del QuadTree.

Informazioni sulla geometria del quadrato:

Informazioni sui punti memorizzati nel quadrato:

Classe QuadTree

NOTA: essendo QuadTree sottoclasse di QuadNode, tutte le funzioni presenti in QuadNode sono presenti anche in QuadTree.

Creazione:

Informazioni generali sul QuadTree:

Informazioni sulla situazione corrente del QuadTree:

Funzione di ricerca:

Aggiunta di un punto:

Eliminazione di un punto:

Specifiche per l'interfaccia

Generalita'

In ogni momento sono presenti in memoria:

L'insieme dei punti extra serve per contenere i punti non ancora inseriti nel / gia' eliminati dal QuadTree durante una sessione di lavoro.
Inizialmente entrambi gli insiemi S ed E sono vuoti. Il QuadTree consiste in un solo quadtrato coincidente con l'intero universo, vuoto.

Il QuadTree si implementa con la classe QuadTree. L'insieme S e' memorizzato nel QuadTree: basta prendere i quadrati della partizione e, per ciascun quadrato, prendere i punti contenuti: questi sono tutti e soli i punti dell'insieme S. Per i punti extra occorre definire una propria implementazione, ricordando che Java fornisce varie classi predefinite per gestire insiemi.

Per default l'interfaccia mostra il QuadTree con i suoi punti e i punti extra. L'utente puo' scegliere di mostrare / nascondere ciascuna di queste due entita'.
A seconda dello stato dell'interfaccia, alcuni elementi possono essere evidenziati, ad esempio durante l'anteprima e l'animazione (ved. dopo).

Accesso alle operazioni applicative

L'utente deve poter fare le seguenti operazioni.

Operazioni sull'insieme dei punti extra:

Operazioni sul QuadTree:

L'aggiunta / eliminazione di un punto al / dal QuadTree puo' essere fatta con anteprima. L'aggiunta / eliminazione di tutti puo' essere fatta con animazione.

Anteprima

L'anteprima puo' essere abilitata e disabilitata dall'utente e riguarda l'aggiunta di un punto al QuadTree e l'eliminazione di un punto dal QuadTree.

Viene eseguita prima la fase "try", viene comunicato come feedback all'utente l'esito dell'operazione e viene mostrato il quadrato della partizione in cui cade il punto da aggiungere / eliminare.

Solo se l'esito era possibile, viene eseguita poi la fase "do" e viene mostrato il quadrato della partizione in cui cade il punto aggiunto / eliminato (Se il punto e' stato appena aggiunto, allora tale quadrato oltre a contenerlo geometricamente lo memorizza anche. Se il punto e' stato appena eliminato, allora tale quadrato lo contiene geometricamente ma non lo memorizza piu').

La figura mostra un esempio di quali quadrati vanno mostrati per l'aggiunta di un punto (capacita' K=2), il punto da aggiungere e' in bianco a sinistra:

La figura mostra un esempio di quali quadrati vanno mostrati per l'eliminazione di un punto (capacita' K=2), il punto eliminato e' in bianco a destra:

Il passaggio dall'una all'altra fase puo' essere comandato dall'utente con una azione (l'utente puo' anche decidere di rinunciare) oppure automatico dopo un certo intervallo di tempo fissato dall'utente (l'interfaccia permette all'utente di scegliere tale intervallo).

Animazione

L'animazione puo' essere abilitata e disabilitata dall'utente e riguarda l'aggiunta di tutti i punti extra al QuadTree e l'eliminazione di tutti i punti dal QuadTree.

Se l'animazione e' attiva, allora dopo ogni passo viene mostrato il nuovo QuadTree, fino al risultato finale. Se l'animazione non e' attiva allora viene mostrato direttamente il risultato finale.

I passi dell'animazione possono essere comandati dall'utente (compiendo un'azione per eseguire il passo successivo) oppure procedere in automatico dopo un certo intervallo di tempo fissato dall'utente (l'interfaccia permette all'utente di scegliere tale intervallo).

L'animazione interagisce con l'anteprima. Se entrambe sono attive, allora per ogni passo eseguito nell'animazione vengono mostrate le due fasi.

In qualsiasi momento l'utente puo' interrompere l'animazione. Dopo averla interrotta puo' riprendere l'esecuzione (per inserire / eliminare i punti rimanenti) oppure abortirla (rinunciando ad inserire / eliminare i punti rimanenti).

Durante la sosta l'utente puo' cambiare lo stato delle abilitazioni e gli intervalli di tempo, sia per l'animazione che per l'anteprima.

Gradi di liberta' e raccomandazioni

Non e' specificato in che modo l'utente deve interagire (es. come si fa a selezionare il punto da inserire nel QuadTree).
E non e' specificato se non in parte il feedback da rendere all'utente (es. come si comunica all'utente l'avvenuta selezione del punto).
E non sono nemmeno specificate le sequenze di azioni necessarie per compiere le varie operazioni (es. per inserire un punto devo prima selezionare il punto e poi dire che lo voglio inserire oppure prima dire che voglio inserire un punto e poi selezionare quale).

Tutto quanto non specificato fa parte della liberta' che avete nel progettare l'interfaccia.

Questa liberta' va gestita tenendo in considerazione i principi generali per la progettazione di interfacce utente (buona presentazione, efficace interazione, facilita' di apprendimento, comodita' d'uso ecc.).

Questo e' un progetto di interfacce utente. 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.