import java.io.*;
import java.awt.*;
import java.lang.*;
import javax.swing.*;
import java.awt.geom.*;
/**
*Classe Ellipse qui hérite de Forme.
*
* @author Eynard Julien et DELCLAUX Florian
* @version Tp2 2_7_Application_Dessin
*/
public class Ellipse extends Forme
{
// champs (variables d'instance)
/**Rayon 1 de l'ellipse*/
protected float Diametre;
/**Rayon 2 de l'ellipse*/
protected float diametre;
/**constante correspondant à la valeur de pi (=3.1416)*/
final float pi= (float)Math.PI;
/**
* Constructeur par défaut pour des objets de type Ellipse.
* Diametre 1 = 10
* Diametre 2 = 5
* @param s : Ellipse remplie ou non
*/
protected Ellipse(boolean s)
{
// initialise les variables d'instance
super(s);
Diametre=10;
diametre=5;
}
/**
* Constructeur pour une position donnée pour des objets de type Ellipse.
* Diametre 1 = 10
* Diametre 2 = 5
* @param x : Abscisse de l'Ellipse.
* @param r : Ordonnée de l'Ellipse.
* @param s : Ellipse remplie ou non.
*/
protected Ellipse(float x, float y, boolean s)
{
// initialise les variables d'instance
super(x,y,s);
Diametre=10;
diametre=5;
}
/**
* Constructeur pour une position donnée et des dimension pour des objets de type Ellipse.
* @param R : Valeur du premier Diametre.
* @param r : Valeur du deuxième Diametre.
* @param x : Absisse de l'Ellipse.
* @param y : Ordonnée de l'Ellipse.
* @param s : Ellipse remplie ou non.
*/
protected Ellipse(float R, float r, float x, float y, boolean s)
{
// initialise les variables d'instance
super(x,y,s);
Diametre=R;//champ correspondant au premier rayon de l'ellipse
diametre=r;//champ correspondant au second rayon de l'ellipse
}
/**
*Redéfinition de la méthode aire() permettant de calculer l'aire de la classe ellipse et des sous classes.
*@return : Le flottant correspondant à l'aire.
*/
protected float aire()
{
return pi*Diametre*diametre/4;
}
/**
*Redéfinition de la méthode perimetre() permettant de calculer le perimetre d'un objet Ellipse et de ses sous types.
*@return : Le flottant correspondant à l'aire.
*/
protected float perimetre()
{
return 2*pi*(float)Math.sqrt(0.5*((float)Math.pow(Diametre/2,2)+(float)Math.pow(diametre/2,2)));
}
/**
* Redéfinition de la méthode toString pour une ellipse
* @return : Une chaîne de caractère décrivant une ellipse découlant de forme et non spécifique à une ellipse pour ses sous classes.
*/
public String toString()
{
String def = "aire = "+ aire() + "\n" + "perimetre = "+ perimetre()+ "\n"+super.toString();
return def;
}
/**
* Redéfinition de la méthode print() qui affiche les caractéristiques spécifiques à une ellipse.
*/
protected void print()
{
System.out.println("Ellipse : \n" +"Diametre 1 = "+Diametre + "\nDiametre 2 = " +diametre +"\n" + toString());
}
/**
* Redéfinition de la méthode redimension afin de redéfinir la taille des rayons de l'ellipse avec les même valeurs.
* Ceci donne donc un cercle dans ce cas ci.
* @param a : Valeur des nouveaux diametres de l'ellipse.
*/
protected void redimension(float a)
{
/*on assigne la même valeur pour les 2 rayons*/
Diametre = a;
diametre = a;
}
/**
* Redéfinition de la méthode redimension afin de redéfinir la taille des rayons de l'ellipse
* @param a : Valeur du nouveau diametre 1.
* @param b : Valeur du nouveau diametre 2.
*/
protected void redimension2(float a, float b)// throws Exception
{
Diametre = a;//on assigne une nouvelle valeur au diametre 1
diametre = b;//on assigne une nouvelle valeur au diametre 2
}
/**
* Redéfinition de la méthode afficher afin d'afficher une ellipse
*@param g : la fenêtre graphique spécifiée (ici l'applet)
*@param c : la couleur à utiliser pour dessiner l'ellipse
*/
protected void afficher(Graphics g, Color c)
{
Ellipse2D ellipse = new Ellipse2D.Double(x,y,Diametre,diametre);//on créer l'Ellipse à afficher
Graphics2D g2 = (Graphics2D)g;//on converti g en type 2D pour pouvoir créer une Ellipse2D
g.setColor(c);//on va utilisé la couleur de l'ellipse pour la dessiner
if (style== false)
g2.draw(ellipse);//on crée une éllipse vide
else
g2.fill(ellipse);//on crée une ellipse pleine
}
}