package shapes;
import java.io.*;
import java.awt.*;
import javax.swing.*;
import java.awt.geom.*;
import java.util.*;
/**
*Classe qui définit un Rectangle qui hérite de Forme.
*
* @author Eynard Julien et DELCLAUX Florian
* @version TP4 version 1 Applet
*/
public class Rectangle extends Forme
{
/**champ correspondant à la longueur du rectangle*/
public float longueur;
/**champ correspondnat à la largeur du rectangle*/
public float largeur;
/**
* Constructeur par défaut pour des objets de type Rectangle.
* Longueur = 20
* Largeur = 10
* @param s : Rectangle remplie ou non
*/
public Rectangle(boolean s)
{
super(s);
longueur = 10;
largeur = 20;
}
/**
* Constructeur pour une position donnée pour des objets de type Rectangle.
* Longueur = 20
* Largeur = 10
* @param x : Abscisse du rectangle
* @param y : Ordonnée du rectangle
* @param s : Rectangle remplie ou non
*/
public Rectangle(float x, float y, boolean s)
{
super(x,y,s);
longueur = 20;
largeur = 10;
}
/**
* Constructeur pour une position et des dimensions données pour des objets de type Rectangle.
* @param L : Longueur du rectangle
* @param l : Largeur du rectangle
* @param x : Abscisse du rectangle
* @param y : Ordonnée du rectangle
* @param s : Rectangle remplie ou non
*
*/
public Rectangle(float L, float l, float x, float y,boolean s)
{
super(x, y,s);
longueur = L;
largeur =l;
}
/**
* Redéfinition de la méthode toString pour un Rectangle
* @return : Une chaîne de caractère décrivant un rectangle découlant de forme et non spécifique à un rectangle pour ses sous classes.
*/
public String toString()
{
return "aire= "+aire()+"\n"+"perimetre= "+perimetre()+"\n"+super.toString();
}
/**
* Redéfinition de la méthode print() qui affiche les caractéristiques spécifiques à un rectangle.
*/
protected void print()
{
System.out.println("rectangle \n"+"largeur= "+largeur+"\n"+"longueur= "+longueur+"\n"+ toString());
}
/**
* Redéfinition de la méthode afficher afin d'afficher un rectangle
*Dessine un Rectangle2D plein ou vide et en couleur.
*@param g : La fenêtre graphique spécifiée (ici l'applet)
*/
public void afficher(Graphics g)
{
Rectangle2D.Float rect = new Rectangle2D.Float(x,y,longueur,largeur);//on crée un Rectangle2D
Graphics2D g2 = (Graphics2D)g;//on cast g en 2D pour pouvoir faire des Rectangle2D
g.setColor(couleur);//on donne la couleur à utiliser pour dessiner qui correspond à la couleur du Rectangle
if(style == false)
g2.draw(rect);//on dessine un rectangle vide
else
g2.fill(rect);//on dessine un rectangle plein
}
/**
*Redéfinition de la méthode aire() permettant de calculer l'aire d'un objet de type rectangle et de ses sous types.
*@return : Valeur du flottant correspondant à l'aire.
*/
protected float aire()
{
return longueur*largeur;
}
/**
*Redéfinition de la méthode perimetre() permettant de calculer le perimetre d'un objet de type Rectangle et de ses sous types.
*@return : Valeur du flottant correspondant à l'aire.
*/
protected float perimetre()
{
return 2*(longueur+largeur);
}
/**
* Redéfinition de la méthode redimension afin de redéfinir la taille des cotés d'un rectangle
*
* @param a : Nouvelle valeur pour la longueur d'un rectangle.
* @param b : Nouvelle valeur pour la largeur d'un rectangle.
*/
public void redimension2(float a, float b) //throws Exception
{
longueur=a;
largeur=b;
}
/**
* Redéfinition de la méthode redimension afin de redéfinir la taille des cotés d'un rectangle de la même façon (création d'un carré)
*
* @param a : Nouvelle valeur pour la longueur et la largeur
*/
public void redimension(float a)
{
longueur=a;
largeur=a;
}
/**
* Définition de la méthode qui modifie la taille du rectangle
*/
public void modifier(int x1,int y1,int x2,int y2)
{
if (x2<x1)
x=x2;
if (y2<y1)
y=y2;
/*On redimensionne le Rectangle avec les longueurs de taille imposé par le déplacement de la souris*/
redimension2(Math.abs(x2-x1),Math.abs(y2-y1));
}
/**
* Définition de la méthode contient, pour savoir si un endroit est contenue dans un rectangle
* @param a : abscisse du pointeur pressé
* @param b : ordonnée du pointeur pressé
*/
public boolean contient (int a, int b)
{
if (((a>x)&&(a<(x+longueur)))&&((b>y)&&(b<(y+largeur))))
return true;
else
return false;
}
}