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;
}
}