OTTAVA ESERCITAZIONE DI LABORATORIO Informatica Grafica – Ingegneria Edile Architettura 31/3/2003 – a.a. 2002/2003 RIFERIMENTO: Horstmann capp. 4 e 5 Introduzione Gli argomenti di questa esercitazione sono Modifica della trasformazione del contesto grafico I/O (input/output) tramite JOptionPane Utilizzo istruzione if else Riutilizzo del codice sviluppato nelle ultime due esercitazioni Esercizio ESERCIZIO 1: Progettare una classe Triangolo con le seguente interfaccia pubblica. Un costruttore di default in grado di istanziare un triangolo degenere con i tre vertici coincidenti con l’origine Un costruttore con 6 parametri x1,x2,x3,y1,y2,y3 in grado di istanziare un oggetto triangolo con vertici di coordinate (x1,y1), (x2,y2), (x3,y3). Un metodo che, ricevendo un parametro di tipo Graphics2D, disegni un oggetto triangolo nel contesto grafico specificato dal parametro. Un metodo senza parametri che restituisca l’area di un oggetto triangolo. Un metodo senza parametri che restituisca il perimetro di un oggetto triangolo. Un metodo senza parametri che restituisca il baricentro di un oggetto triangolo. Un metodo senza parametri che verifichi se un triangolo è retto restituendo un tipo booleano. Un metodo senza parametri che verifichi se un triangolo è ottusangolo restituendo un tipo booleano. Per la classe Triangolo si richiede di generare la documentazione ipertestuale dopo aver commentato opportunamente il codice. Scrivere inoltre un’applet, DisegnaTriangolo, che, utilizzando la precedente classe, permetta di disegnare un triangolo, definito all’interno di una finestra in coordinate utente, in una porzione di finestra di dispositivo (viewport) oltre a stampare su console le principali caratteristiche del triangolo disegnato, ovvero se il triangolo è degenere (vertici allineati), se è retto/ottusangolo/acutangolo, il valore dell’area e del perimetro e le coordinate del baricentro. Il codice da cui partire Per risolvere l’esercizio precedente bisognerà riutilizzare il codice sviluppato nelle due ultime esercitazione, combinandolo, riadattandolo ed ampliandolo alle nuove specifiche. In particolare l’esercizio si intenderà completamente risolto una volta ottenuti i seguenti file. Una classe Triangolo.java con un’interfaccia pubblica come specificata nell’esercizio, opportunamente commentata per la generazione della documentazione ipertestuale. 2. Un’applet DisegnaTriangoli.java in grado di a. acquisire da utente le coordinate dei vertici del triangolo, i parametri delle finestre di utente e di viewport, b. istanziare un oggetto triangolo con le coordinate fornite in input e calcolarne le principali proprietà sfruttando i metodi pubblici di una classe Triangolo.java, c. effettuare la trasformazione di coordinate del contesto grafico d. disegnare il triangolo sfruttando il metodo pubblico di disegno disponibile nella classe Triangolo. Si fa notare che i primi due passi vanno implementati nel costruttore dell’applet o nel metodo init() affinché non vengano rieseguiti ad ogni modifica della finestra dell’applet. Gli ultimi due passi invece che riguardando il disegno dell’applet vanno implementati nel metodo paint per assicurare che ad ogni modifica della finestra dell’applet, il suo contenuto venga ridisegnato correttamente. 1. 3. Un file DisegnaTriangoli.htm con un breve codice html in grado di caricare un’applet DisegnaTriangoli.class. 4. Un insieme di file html di documentazione della classe Triangoli, ottenibili lanciando dal prompt del DOS il comando javadoc Triangolo Il codice del punto 1 viene fornito parzialmente realizzato ed è scaricabile dal sito. Per completarne il codice bisognerà implementare i metodi public void disegna(Graphics2D g) public boolean isRetto() public boolean isOttusangolo() Il codice dei restanti metodi è già realizzato. I commenti per la generazione della documentazione ipertestuale sono già stati inseriti. Si fa notare che rispetto al codice presentato nell’esercitazione del 3/3/2003 il tipo Point è stato sostituito con il tipo Point2D.Double del pacchetto java.awt.geom.*. Il metodo privato ausiliario per il calcolo della distanza tra due punti è stato eliminato e si è utilizzato il metodo distance già disponibile nell’interfaccia pubblica della classe Point2D.Double. I costruttori sono stati inoltre modificati per adattarli alle specifiche dell’esercizio. Il codice del punto 2 è reso disponibile già completamente realizzato e scaricabile dal sito dell’esercitazione. Il codice del punto 3 è reso disponibile già completamente realizzato e scaricabile dal sito dell’esercitazione. La documentazione ipertestuale va generata col comando javadoc Triangolo dal prompt del DOS come spiegato nell'esercitazione del 17/2/2003. I passi dell’esercitazione 1. Scaricare i codici di cui ai punti 1-3 della sezione precedente salvandoli in una stessa cartella. 2. Aprire i tre file da JCreator, compilare i codici Triangolo.java e DisegnaTriangoli.java, ed eseguire DisegnaTriangoli.htm. 3. Implementare il metodo disegna della classe Triangolo, compilare (correggendo eventuali errori) ed eseguire il file DisegnaTriangoli.htm. 4. Implementare i metodi isRetto ed isOttusangolo1 della classe Triangolo, compilare (correggendo eventuali errori) ed eseguire il file DisegnaTriangoli.htm. 5. Generare la documentazione ipertestuale della classe Triangolo. 6. Se è rimasto del tempo, introdurre dei controlli di consistenza dell’input nel codice dell’applet. In particolare, verificare che per i parametri della finestra utente ed il viewport valgano le seguenti condizioni: x1<x2 y1<y2 0<=xmin<xmax<=1 0<=ymin<ymax<=1 Nel caso in cui una di queste condizioni sia violata il programma deve terminare con un opportuno messaggio d’errore. Compilare il codice e provare i controlli di consistenza. 1 Si ricorda che un triangolo retto ha un angolo retto e due acuti, un triangolo ottusangolo ha un angolo ottuso e due acuti, un triangolo acutangolo ha 3 angoli acuti. E’ facile verificare se un triangolo possiede angoli retti o ottusi conoscendo le lunghezza dei tre lati. Infatti, sia dato un triangolo con lati a,b,c e con angolo che si oppone al lato a. Se a2=b2+c2 l’angolo è retto, se a2<b2+c2 l’angolo è acuto, e se a2>b2+c2 l’angolo è ottuso.