import java.awt.*;
/**
 * Projet: PaintRevolution
 * <p>Title:Polygone.java </p>
 * <p>Description:Classe abstraite qui représente une forme géométrique de type Polygone </p>
 * <p>Copyright: Copyright (c) 2005</p>
 * <p>Societe: IUT NANCY CHARLEMAGNE II</p>
 * @author VIGNERON GEOFFROY && GANGANELLI DORIAN
 * @version 3.0
 */

public abstract class Polygone extends FigureColoree{


  /**
   * Constructeur de la classe qui initialise les points représentant
   * les sommets de la figure.
   */
  public Polygone(){
    super();
    for (int i=0 ; i<this.tab_mem.length ; i++)
      tab_mem[i] = new UnPoint( (int)(Math.random()*600) , (int)(Math.random()*600) );
  }

  /**
   * Méthode qui permet de dessiner et visualiser à l'écran la figure à construire
   * @param g environnement graphique associé
   */
  public void affiche(Graphics g){
    super.affiche(g);
    g.fillPolygon( this.toPolygon());
  }

  /**
   * Méthode qui permet de modifier les points d'une figure
   * @param tab_saisie tableau contenant nouveau points
   */
 public void modifierPoints(UnPoint[] tab_saisie){
    this.tab_mem=new UnPoint[tab_saisie.length];
    for (int i=0;i<this.tab_mem.length;i++)
      this.tab_mem[i]=new UnPoint(tab_saisie[i].rendreX(), tab_saisie[i].rendreY());
  }

  /**
   * Méthode qui permet de convertir une figure (autre qu'un ConiqueCentree) en polygone
   * @return le polygone
   */
  public Polygon toPolygon() {
    int[] abscisse = new int[this.tab_mem.length];
    int[] ordonnee = new int[this.tab_mem.length];
    // stock abscisses et ordonnées des sommets du polygone dans un tableau.
    for (int i=0 ; i < this.tab_mem.length ; i++) {
      abscisse[i] = this.tab_mem[i].rendreX();
      ordonnee[i] = this.tab_mem[i].rendreY();
    }
    Polygon p =new Polygon(abscisse,ordonnee,abscisse.length);
    return p;
  }

  /**
   * Cette méthode retourne "vrai" si les coordonnées x et y passées en
   * paramètre sont dans le polygone.
   * @param x l'abscisse
   * @param y l'ordonnée
   * @return un booléen
   */
  public boolean contient(int x, int y) {
    Polygon p = this.toPolygon();
    return p.contains(x,y);
  }

}
