package shapes;

import java.io.*;
import java.awt.*;
import java.lang.*;
import java.util.*;
import javax.swing.*;
import java.awt.geom.*;
/**
 *Classe Cercle qui hérite de Ellipse.
 * 
 * @author Eynard Julien et DELCLAUX Florian 
 * @version TP4 version 1 Applet
 */
public class Cercle extends Ellipse
{
     /**
     * Constructeur par défaut pour des objets de type Ellipse.
     * Rayon = 10
     */
    public Cercle(boolean s)
        {
        // initialise les variables d'instance
            super(10,10,s);
        }

    /**
     * Constructeur pour une position donnée pour des objets de type Ellipse.
     * Rayon = 10
     * @param x : Abscisse du cercle.
     * @param y : Ordonnée du cercle.
     */
    public Cercle(float x, float y, boolean s)
        {
        // initialise les variables d'instance
            super(10,10,x,y,s);
        }

    /**
     * Constructeur pour une position et des dimensions des objets de type Ellipse.
     * @param R : Valeur du rayon du cercle.
     * @param x : Abscisse du cercle.
     * @param y : Ordonnée du cercle.
     * @param s : cercle rempli ou non
     */
    public Cercle(float R, float x, float y,boolean s)
        {
            // initialise les variables d'instance
            super(R,R,x,y,s);
        }

    /**
     * Redéfinition de la méthode toString pour un cercle
     * @return : Une chaîne de caractère décrivant un cercle découlant de ellipse.
     */
    public String toString()
        {
            String def = super.toString();
            return def;
        }

    /**
     * Redéfinition de la méthode print() qui affiche les caractéristiques spécifiques à un cercle.
     */
    protected void print()
        {
            System.out.println("Cercle :\n" + "Diametre = "+diametre2+"\n"+ toString());
        }


     /**
     * Redéfinition de la méthode redimension2 afin de redéfinir la taille du rayon du cercle.
     *Cette méthode ne doit pas être utilisé avec un Cercle
     * @param a : Valeur du nouveau rayon 1
     * @param b : Valeur du nouveau rayon 2 
     */
    public void redimension2(float a, float b) //throws Exception
        {
            if (a==b)
                super.redimension2(a,b);
            else
            ;
               // throw new Exception();
        }


     /**
     * Définition de la méthode qui modifie la taille du cercle
     */
    public void modifier(int x1,int y1,int x2,int y2)
        {

                    /*On redimensionne le Cercle avec les rayons de taille imposé par le déplacement de la souris en utilisant le plus grand déplacement entre x et y*/
                    if ((Math.abs(x2-x1))<(Math.abs(y2-y1)))
                        {
                            redimension(Math.abs(y2-y1)+Diametre1/2);
                        }

                    else
                        {
                            redimension(Math.abs(x2-x1)+Diametre1/2);

                         }
        }

     /**
     * Redéfinition de la méthode afficher afin d'afficher une cercle
     *@param g : la fenêtre graphique spécifiée (ici l'applet)
     */
    public void afficher(Graphics g)
        {
             Ellipse2D ellipse = new Ellipse2D.Double(x-Diametre1/2,y-diametre2/2,Diametre1,diametre2);//on créer le Cercle à afficher       
             Graphics2D g2 = (Graphics2D)g;//on converti g en type 2D pour pouvoir créer un cercle sur le type d'une Ellipse2D
             g.setColor(couleur);//on va utiliser la couleur du cercle pour la dessiner
             if (style== false)
                  g2.draw(ellipse);//on crée un cercle vide
             else
                  g2.fill(ellipse);//on crée un cercle plein

        }

         /**
     * Définition de la méthode contient, pour savoir si un endroit est contenue dans une ellipse
     *
     */
    public boolean contient (int a, int b)
        {
             System.out.println(x+","+y);
            if (diametre2/2>=Math.sqrt(Math.pow(a-x,2)+Math.pow(b-y,2)))
                return true;
            else
                return false;
        }





}