/**
 * classe Triangle
 *
 * Modélise la figure 2D triangle par ses 3 sommets et son nom
 *
 * @author Matthias Colin
 * @version 1.0 (5/03/2009)
 */
public class Triangle {
	
	// champs
	
	private Point [] sommets;  // les 3 sommets du triangle
	private String nom;	// le nom de la figure

	// constructeurs

	/**
	 * constructeur Triangle à partir de ses 3 sommets et de son nom 
	 */
	public Triangle(String nomInit, Point sommet1Init, Point sommet2Init,
		Point sommet3Init) 
	{
		this.sommets = new Point[3];
		this.sommets[0] = sommet1Init;
		this.sommets[1] = sommet2Init;
		this.sommets[2] = sommet3Init;
		this.nom = nomInit;
	}

	// accesseurs
	
	/**
	 * obtenir un sommet du triangle
	 * @param index : numéro du sommet à récupérer (1 à 3)
	 * @return le sommet demandé (Point)
	 */
	public Point getSommet(int index) {
		return this.sommets[index - 1];
	}
	
	/**
	 * obtenir tous les sommets du triangle
	 * @return le tableau des 3 sommets
	 */
	public Point[] getSommets() {
		return this.sommets;
	}

	/**
	 * obtenir le nom de la figure
	 * @return nom de la figure
	 */
	public String getNom(){
		return this.nom;
	}

	// autres méthodes
	
	/**
	 * translater la figure
	 * @param deplacementHorizontal : partie horizontale du vecteur de déplacement
	 * @param deplacementVertical : partie verticale du vecteur de déplacement
	 */
	public void translater(
			int deplacementHorizontal,
			int deplacementVertical) 
	{
		// pour translater le triangle, on translate les 3 sommets
		for (Point sommet : this.sommets) {
			sommet.translater(
				deplacementHorizontal, 
				deplacementVertical);
		}
	}

	/**
	 * obtenir le périmètre de la figure
	 * @return le périmètre
	 */
	public float perimetre() {
		return this.getSommet(1).distance(this.getSommet(2))
			+ this.getSommet(2).distance(this.getSommet(3))
			+ this.getSommet(3).distance(this.getSommet(1));
	}

	/**
	 * obtenir la surface de la figure
 	 * méthode : formule de Héron A = SQRT(s(s-a)(s-b)(s-c)) avec s=1/2.(a+b+c)
	 * @return la surface
 	 */ 
	public float surface() {
		float longueur1;
		float longueur2;
		float longueur3;
		float somme;
		longueur1 = this.getSommet(1).distance(this.getSommet(2));
		longueur2 = this.getSommet(2).distance(this.getSommet(3));
		longueur3 = this.getSommet(3).distance(this.getSommet(1));
		somme = longueur1 + longueur2 + longueur3;
		return (float) Math.sqrt(somme * (somme - longueur1) 
			* (somme - longueur2) * (somme - longueur3));
	}

	/**
	 * représentation de la figure en chaîne de caractères
 	 * format : nom/sommet1 - sommet2 - sommet3\
	 * @return la représentation textuelle de la figure 
 	 */ 
	public String toString() {
		return this.getNom() + "/"  + this.getSommet(1) + " - " 
			+ this.getSommet(2) + " - " + this.getSommet(3) + "\\";
	}
	
}
