public class Polygone {

	// les sommets du Polygone
	private Point[] sommets;

	/**
	 * constructeur de la classe Polygone
	 * @param sommets : les points formant les sommets du Polygone
	 * NB : le type Point... est assimilé au type Point[] dans son
	 * traitement
	 */
	public Polygone(Point... sommets) {
		this.sommets = sommets;
	}
	
	// accesseurs [ dépendants de l'implémentation interne du polygone ]
	
	/**
	 * obtenir le nombre de sommets du Polygone
	 * @return : le nombre de sommets
	 */
	public int getNombreSommets() {
		return sommets.length;
	}

	/**
	 * obtenir un sommet du Polygone à partir de son index
	 * les sommets sont numérotés de 1 à n
	 * @param index : numéro du sommet à renvoyer
	 */
	public Point getSommet(int index) {
		if ((index > 0) || (index <= sommets.length)) {
			return sommets[index - 1];
		} else {
			return null;
		}
	}

	// autres méthodes [ indépendantes de l'implémentation interne du polygone ]
	
	/**
	 * 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 déplacer le polygone, on déplace tous ses sommets
		for (Point sommet : sommets) {
			sommet.translater(deplacementHorizontal, deplacementVertical);
		}
	}

	/**
	 * obtenir le périmètre de la figure
	 * @return le périmètre
	 */
	public float perimetre() {
		float perimetreCalcule; // périmètre calculé
		perimetreCalcule = 0;
		// on additionne les distances entre les sommets i à i+1 pour
		// les n-1 premiers sommets
		for (int i = 1; i < this.getNombreSommets(); i++) {
			perimetreCalcule += this.getSommet(i).distance(this.getSommet(i+1));
		}
		// on ajoute la distance du dernier sommet au 1er
		perimetreCalcule += this.getSommet(this.getNombreSommets()).distance(
				this.getSommet(1));
		return perimetreCalcule;
	}
	
	/**
	 * représentation de la figure en chaîne de caractères
 	 * Format : Poly|point1|...|pointn|
 	 */ 
	public String toString() {
		String polygoneTexte;
		polygoneTexte = "Poly|";
		for (Point sommet : sommets) {
			polygoneTexte += sommet + "|";
		}
		return polygoneTexte;
	}
	
}