package BestOf;

/**
 * classe Cercle
 *
 * Représentation d'un cercle avec centre, rayon et nom
 *
 * @author Matthias Colin
 * @version 2.1 (09/04/2010)
 */
public class Cercle extends Figure implements Meusurable{
	
	// champs
	
	private Point centre;	// centre du cercle
	private int rayon;		// rayon du cercle

	// constructeurs

	/**
	 * constructeur Cercle à partir de son nom, son centre et son rayon
	 */
	public Cercle(String nomInit, Point centreInit, 
		int rayonInit) 
	{
		super(nomInit);
		this.centre = centreInit;
		this.rayon = rayonInit;
	}

	// accesseurs
	
	/**
	 * obtenir le centre du cercle
	 * @return le point au centre du cercle
	 */
	public Point getCentre() {
		return this.centre;
	}

	/**
	 * obtenir le rayon du cercle
	 * @return le rayon entier du cercle
	 */
	public int getRayon() {
		return this.rayon;
	}

	// autres méthodes
	
	/**
	 * translater la figure
	 * @param deplacementHorizontal : partie horizontale du vecteur de déplacement
	 * @param deplacementVertical : partie verticale du vecteur de déplacement
	 */
	@Override
	public void translater(
			int deplacementHorizontal,
			int deplacementVertical) 
	{
		// pour déplacer le cercle, on déplace uniquement son centre
		this.getCentre().translater(
			deplacementHorizontal, 
			deplacementVertical);
	}

	/**
	 * obtenir le périmètre de la figure
	 * @return le périmètre
	 */
	@Override
	public double perimetre() {
		return (2 * Math.PI * this.getRayon());
	}

	/**
	 * obtenir la surface de la figure
	 * @return la surface
 	 */ 
	@Override
	public double surface() {
		return (Math.PI * Math.pow(this.getRayon(), 2));
	}

	/**
	 * représentation de la figure en chaîne de caractères
 	 * Format : nom[centre ; r:rayon]
 	 */ 
	@Override
	public String toString() {
		return this.getNom() + "["  + this.getCentre() + " ; "
			+ this.getRayon() + "]";
	}

	/**
 	 * Egalité du Cercle avec un autre
	 * @return true si les cercles ont les mêmes propriétés (nom, centre et rayon)
 	 */
	@Override
	public boolean equals(Object autreObjet) {
		if (autreObjet == null) {
			return false;
		}
		if (!(autreObjet instanceof Cercle)) {
			return false;
		}
		Cercle autreCercle = (Cercle) autreObjet;
		return (this.getNom().equals(autreCercle.getNom())
				&& this.getCentre().equals(autreCercle.getCentre())
				&& this.getRayon() == autreCercle.getRayon());
	}	

}
