http://www.disi.unige.it/person/MagilloP/P2_SMID05/esercizio.html
Partiamo dalle classi:
Vector.java
Questa e' una banale variante
della classe Rectangle.java vista a lezione:
come un rettangolo ha due dimensioni (length,width)
cosi' un vettore ha due componenti (x,y),
il costruttore e' analogo,
i metodi "get" e "set" sono analoghi (cambiano solo i nomi),
il metodo "print" anche,
il metodo "area" ovviamente manca.
VagoneGenerico.java e ObjectList.java viste a lezione per implementare una lista di oggetti generici.
Con questi ingredienti definire una classe "Polyline" che rappresenta una spezzata poligonale. Una spezzata poligonale e' caratterizzata da:
La nostra classe "Polyline" avra' quindi due attributi interi per le coordinate del punto di partenza e una lista di oggetti, che saranno vettori, per i movimenti di traslazione.
I metodi da definire nella classe Polyline sono:
Polyline(int xx0, int yy0) -- costruttore
costruisce spezzata con punto iniziale (xx0,yy0) e
nessun segmento (spezzata degenere), cioe' lista
di segmenti esistente (non nulla) e vuota.
void addSegment(int x, int y) -- Aggiunge un segmento all'inizio della polyline (ved. figura [2]):
void printVertices() --
Calcola e stampa i vertici della spezzata.
Il primo vertice e' il punto di partenza (x0,y0), lo stampo.
I vertici successivi si calcolano sommando il
prossimo vettore al vertice precedente.
Devo scorrere la lista dei vettori fino in fondo. Ad ogni passo:
Lo scorrimento della lista si fa sul modello della funzione "oggettoPerNumero" della classe ObjectList, con le seguenti differenze:
Nella classe Poilyline, provare il seguente "main", che costruisce la spezzata della figura [1]:
public static void main (String[] args) { Polyline pp = new Polyline(12,2); pp.addSegment(-2,-5); pp.addSegment(2,-2); pp.addSegment(3,1); pp.addSegment(-1,4); pp.addSegment(4,3); pp.addSegment(0,-4); pp.addSegment(3,1); pp.addSegment(2,-3); pp.printVertices(); }Deve dare in output i seguenti vertici (ved. figura [3]): (1,7) (3,4) (6,5) (6,1) (10,4) (9,8) (12,9) (14,7) (12,2)
Figura [1]: spezzata con punto iniziale (x0,y0) e lista di vettori di traslazione. |
![]() |
Figura [2]: aggiunta di un segmento alla spezzata di punto iniziale (3,4). |
![]() |
Figura [3]: vertici della spezzata di figura 1. |