Corso di Interfacce Utente - A.A. 2005-2006

PROGETTO DI LABORATORIO - DOCUMENTO 2 DI 3

Vedere la pagina principale del progetto per gli altri due documenti.

Descrizione delle classi che implementano l'applicazione "Diagramma di Voronoi"

L'applicazione e' costituita dalle seguenti classi Java:

Classe PointXY

Costruttori:

Metodi:

Classe Voronoi

I siti possono essere al massimo 150 (le regioni sono tante quante i siti).
Ogni sito ha un "nome" ovvero un numero intero non negativo che lo identifica univocamente. Quando un sito viene eliminato dal diagramma, il suo "nome" non verra' assegnato a nessun altro sito che venga inserito dopo, ma per i nuovi siti saranno usati altri numeri. Quindi in generale, in un diagramma di Voronoi con K siti, i "nomi" NON sono i numeri da 0 a K-1, ma possono essere numeri sparsi anche molto piu' grandi di K.
Siccome le regioni di Voronoi ricoprono tutto il piano, alcune si esse sono infinite, cioe' hanno dei vertici all'infinito. In pratica, quando le coordinate di un vertice sarebbero all'infinito, vengono "approssimate" con numeri molto grandi in positivo o in negativo. Questo non crea problemi fino a che non andiamo a disegnare (vedere classe Clipping dopo).

Costante:

Costruttori:

Metodi per vedere i siti e le regioni di Voronoi:

Metodi relativi ai "nomi" dei siti:

Attenzione: il nome di un sito non e' uguale alla sua posizione nell'array ritornato da getPoints(). Quindi NON si puo' usare il nome come indice nell'array, ne' si puo' usare l'indice nell'array come nome.

Metodi relativi alla posizione di un punto rispetto al diagramma di Voronoi:

Metodi per aggiungere o eliminare un sito:

Diagramma di Voronoi prima e dopo aver inserito il punto 10 (o dopo e prima averlo cancellato):

Classe Clipping

In generale una regione di Voronoi puo' cadere in parte fuori dalla finestra grafica in cui stiamo disegnando il diagramma, avendo i suoi vertici anche coordinate molto grandi in valore assoluto (in teoria possono avere coordinate all'infinito).
Per assicurare che Java riesca a disegnare correttamente anche in questi casi, bisogna "ritagliare" le regioni: tenere di ogni regione solo la parte che sta dentro il rettangolo in cui andiamo a disegnare. Questa operazione si chiama "clipping".

La classe Clipping ha una sola funzione di classe, che serve proprio a questo:

Diagramma di Voronoi con tracciati i lati delle regioni "intere" e colorato l'interno delle regioni dopo il "clipping":