/** * descrive un triangolo * * @author Adriano Luchetta * @version 28-Ott-2004 * @version 20-Sett-2003 */ public class Triangolo { // variabili di esemplare private double a; private double b; private double c; String infoStr; /** Construttore della classe Triangolo @param la lato a @param lb lato b @param lc lato c */ public Triangolo (double la, double lb, double lc) { // inizializzazione delle variabili di esemplare a = la; b = lb; c = lc; // Ordinamento dei lati c >= b >= a if (a > b) //se a > b scambio a con b { double tmp = b; b = a; a = tmp; } if (a > c) //se a > c scambio a con c { double tmp = c; c = a; a = tmp; } if (b > c) //se b > c scambio b con c { double tmp = c; c = b; b = tmp; } } /** restituisce informazioni sul triangolo. le informazioni sono relative ai lati: equilatero, isoscele, scaleno. agli angoli: acutangolo, rettangolo, ottusangolo. @return classificazione del triangolo. Esempio: per il triangolo di lati 3, 4, 5 restituisce la stringa "scaleno rettangolo". */ public String info() { /* Precondizioni: in un triangolo la somma di due lati deve essere superiore al terzo lato */ if (a + b <= c) return "non e' un triangolo!"; if (a == b && b == c) // Equilatero: tre lati di pari lunghezza return "equilatero"; // non verifico gli angoli perche' un // triangolo equilatero e' sempre // ottusangolo! String infoStr = ""; if ( a == b || b == c) // Isoscele: due lati di pari lunghezza infoStr = "isoscele"; else infoStr = "scaleno"; // Scaleno: lati di diversa lunghezza // Classificazione secondo gli angoli if (c * c - a * a - b * b == 0) // Rettangolo: un angolo pari a 90 gradi infoStr += " rettangolo"; else if ( c * c - a * a - b * b < 0) // Acutangolo: tutti gli angolo inferiori a 90 gradi infoStr += " acutangolo"; else // Ottusangolo: un angolo superiore a 90 gradi infoStr += " ottusangolo"; return infoStr; } /** restituisce una stringa contenente una descrizione testuale dell'oggetto nel formato T(a, b, c) @return descrizione testuale. Esempio "T(3, 4, 5)" */ public String toString () { return "T(" + a + ", " + b + " ," + c +")"; } /** calcola l'area del triangolo. Usa la formula di Erone: area * area = p * (p - a) * (p - b) * (p - c), con 2 * p = a + b + c @return area */ public double area() { double p = (a + b + c) / 2; return Math.sqrt(p * (p - a) * (p - b) * (p - c)); } /** calcola l'altezze del triangolo relativa al lato maggiore: @return l'altezza relativa al lato maggiore */ public double h() { return 2 * area() / c; } }