package BestOf;

/**
 * classe Point
 *
 * Modélise la figure 2D point par ses coordonnées et son nom
 *
 * @author Matthias Colin
 * @version 2.1 (09/04/2010)
 */
 public class Point extends Figure {

	// champs
	 
	private int abscisse; // coordonnée horizontale entière du point
	private int ordonnee; // coordonnée verticale entière du point

	// constructeurs

	/**
	 * constructeur Point à partir des ses coordonnées entières et de son nom
	 */
	public Point(String nomInit, int abscisseInit, 
			int ordonneeInit)
	{
		super(nomInit);
		this.abscisse = abscisseInit;
		this.ordonnee = ordonneeInit;
	}

	// Accesseurs
	
	/**
	 * obtenir l'abscisse du point
	 * @return l'abscisse
	 */
	public int getAbscisse(){
		return this.abscisse;
	}

	/**
	 * obtenir l'ordonnée du point
	 * @return l'ordonnée
	 */
	public int getOrdonnee(){
		return this.ordonnee;
	}

	// 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) 
	{
		this.abscisse = this.abscisse + deplacementHorizontal;
		this.ordonnee = this.ordonnee + deplacementVertical;	
	}

	/**
 	 * Distance de l'objet courant à un autre point
	 * @param autrePoint : le point dont on veut calculer la distance par rapport au point courant
 	 */ 
	public double distance(Point autrePoint) {
		return Math.sqrt(
			Math.pow(this.getAbscisse() - autrePoint.getAbscisse(), 2)
			+ Math.pow(this.getOrdonnee() - autrePoint.getOrdonnee(),2));
	}

	/**
	 * Représentation de la figure sous la forme d'une chaîne de caractères
 	 * Format : nom(x, y)
 	 */ 
	@Override 
	public String toString() {
		return this.getNom() + "("  + this.getAbscisse() + ", "
			+ this.getOrdonnee() + ")";
	}
	
	/**
 	 * Egalité entre 2 points
	 * @return true si le point passé en paramètre a les mêmes propriétés
	 * que le point courant
 	 */ 
	@Override
	public boolean equals(Object autreObjet) {
		if (autreObjet == null) {
			return false;
		}
		if (!(autreObjet instanceof Point)) {
			return false;
		}
		Point autrePoint = (Point) autreObjet;
		return this.getNom().equals(autrePoint.getNom())
			&& (this.getAbscisse() == autrePoint.getAbscisse())
			&& (this.getOrdonnee() == autrePoint.getOrdonnee());
	}
}
