projet-mini-programmation-o.../Cercle.java

234 lines
5.1 KiB
Java
Raw Normal View History

2023-06-20 19:03:42 +00:00
import java.awt.Color;
/**
* Cercle modélise un cercle géométrique dans un plan équipé d'un
* repère cartésien. Un cercle peut être affiché et translaté.
*/
public class Cercle implements Mesurable2D {
//@ public invariant getRayon() > 0;
//@ public invariant getDiametre() > 0;
//@ private invariant rayon == getRayon();
//@ private invariant 2*rayon == getDiametre();
//@ private invariant couleur == getCouleur();
//@ private invariant centre.getX() == getCentre().getX();
//@ private invariant centre.getY() == getCentre().getY();
// Constantes
/** constante mathématique π. */
public static final double PI = Math.PI;
// Attributs
/** centre du cercle. */
private Point centre;
/** rayon du cercle. */
private double rayon;
/** couleur du cercle. */
private Color couleur = Color.BLUE;
// Constructeurs
/**
* Construire un cercle à partir de son centre et de son rayon.
* @param centre centre du cercle
* @param rayon rayon du cercle
*/
//@ requires centre != null;
//@ requires rayon > 0;
public Cercle(Point centre, double rayon) {
assert centre != null;
assert rayon > 0;
this.centre = new Point(centre.getX(),
centre.getY());
this.rayon = rayon;
}
/**
* Construire un cercle à partir de deux points diamétralement opposés.
* @param p1 point n°1
* @param p2 point n°2
*/
//@ requires p1 != null;
//@ requires p2 != null;
//@ requires p1.getX() != p2.getX() && p1.getY() != p2.getY();
//@ ensures getRayon() > 0;
public Cercle(Point p1, Point p2) {
assert p1 != null;
assert p2 != null;
assert p1.getX() != p2.getX()
|| p1.getY() != p2.getY();
this.centre = new Point((p1.getX() + p2.getX()) / 2,
(p1.getY() + p2.getY()) / 2);
this.rayon = p1.distance(p2) / 2;
}
/**
* Construire un cercle coloré à partir de deux points diamétralement opposés.
* @param p1 point n°1
* @param p2 point n°2
* @param couleur couleur du cercle
*/
//@ requires couleur != null;
public Cercle(Point p1, Point p2, Color couleur) {
this(p1, p2);
assert couleur != null;
this.couleur = couleur;
}
// GETs
/**
* Obtenir le rayon du cercle.
* @return rayon du cercle
*/
//@ ensures \result > 0;
public /*@ pure @*/ double getRayon() {
return this.rayon;
}
/**
* Obtenir le diamètre du cercle.
* @return diamètre du cercle
*/
//@ ensures \result > 0;
public /*@ pure @*/ double getDiametre() {
return 2 * this.rayon;
}
/**
* Obtenir le centre du cercle.
* @return centre du cercle
*/
public /*@ pure @*/ Point getCentre() {
return new Point(this.centre.getX(),
this.centre.getY());
}
/**
* Obtenir la couleur du cercle.
* @return couleur du cercle
*/
public /*@ pure @*/ Color getCouleur() {
return this.couleur;
}
// SETs
/**
* Changer le rayon du cercle.
* @param rayon nouveau rayon
*/
//@ requires rayon > 0;
//@ ensures getRayon() == rayon
public void setRayon(double rayon) {
assert rayon > 0;
this.rayon = rayon;
}
/**
* Changer le diamètre du cercle.
* @param d nouveau diamètre
*/
//@ requires d > 0;
//@ ensures getDiametre() == d
public void setDiametre(double d) {
assert d > 0;
this.rayon = d / 2;
}
/**
* Changer le centre du cercle.
* @param centre nouveau centre
*/
//@ requires centre != null;
public void setCentre(Point centre) {
assert centre != null;
this.centre = centre;
}
/**
* Changer la couleur du cercle.
* @param nouvelleCouleur nouvelle couleur
*/
//@ requires nouvelleCouleur != null;
public void setCouleur(Color nouvelleCouleur) {
assert nouvelleCouleur != null;
this.couleur = nouvelleCouleur;
}
// Prints
/**
* Convertir le Cercle en un String pour son affichage.
* @return String associée au Cercle
*/
public String toString() {
return "C" + this.rayon
+ "@" + this.centre;
}
/**
* Afficher le cercle.
*/
public void afficher() {
System.out.print(this);
}
// Méthodes
/**
* Translater le cercle.
* @param dx déplacement suivant l'axe des X
* @param dy déplacement suivant l'axe des Y
*/
public void translater(double dx, double dy) {
this.centre.translater(dx, dy);
}
/**
* Vérifier si un point est à l'intérieur du cercle.
* @param p point que l'on souhaite tester
* @return true si p 𝒞
*/
//@ requires p != null;
public boolean contient(Point p) {
assert p != null;
return p.distance(this.centre) <= this.rayon;
}
/**
* Renvoie le périmètre du cercle.
* @return perimètre du cercle
*/
public double perimetre() {
return 2 * PI * this.rayon;
}
/**
* Renvoie l'aire du cercle.
* @return aire du cercle
*/
public double aire() {
return PI * this.rayon * this.rayon;
}
// Méthodes de classe
/**
* Renvoie un Cercle créé à partir du centre et d'un point du cercle.
* @param centre centre du Cercle
* @param circ Point situé sur le cercle
* @return objet Cercle
*/
//@ requires centre != null;
//@ requires circ != null;
public static Cercle creerCercle(Point centre, Point circ) {
assert centre != null;
assert circ != null;
return new Cercle(centre, centre.distance(circ));
}
}