Segment.java
001 package fr.isae.geometry;
002 
003 import fr.isae.observer.Observateur;
004 
005 /**
006  <code>Segment</code> est une classe permettant de modeliser un
007  * segment geometrique. Ce segment est compose de deux points et on
008  * peut recuperer sa longueur et le translater.
009  *
010  @author <a href="mailto:garion@isae.fr">Christophe Garion</a>
011  @version 1.0
012  */
013 public class Segment extends Observateur {
014 
015     private Point extremite1;
016     private Point extremite2;
017     private double longueur;
018 
019     /**
020      * Cree une nouvelle instance de <code>Segment</code>. Attention,
021      * les points passes en parametre sont affectes directement aux
022      * attributs de l'objet a creer.
023      *
024      <p> On aurait pu egalement creer de nouveaux points a partir des
025      * points passes en parametre.
026      *
027      @param p1 un <code>Point</code> representant la premiere extremite
028      *           du segment
029      @param p2 un <code>Point</code> representant la seconde extremite
030      *           du segment
031      */
032     public Segment(Point p1, Point p2) {
033         this.extremite1 = p1;
034         p1.inscrire(this);
035         this.extremite2 = p2;
036         p2.inscrire(this);
037         this.longueur = p1.distance(p2);
038     }
039 
040     /**
041      <code>getExtremite1</code> retourne le point correspondant a
042      * la premiere extremite du segment.
043      *
044      @return le <code>Point</code> qui est la premiere extremite
045      */
046     public Point getExtremite1() {
047         return this.extremite1;
048     }
049 
050     /**
051      <code>getExtremite2</code> retourne le point correspondant a
052      * la seconde extremite du segment.
053      *
054      @return le <code>Point</code> qui est la seconde extremite
055      */
056     public Point getExtremite2() {
057         return this.extremite2;
058     }
059 
060     /**
061      <code>getLongueur</code> renvoie la longueur du segment.
062      *
063      @return un <code>double</code> qui est la longueur du segment
064      */
065     public double getLongueur() {
066         return this.longueur;
067     }
068 
069     /**
070      <code>translater</code> permet de translater le segment.
071      *
072      @param dx l'abscisse du vecteur de translation
073      @param dy l'ordonnee du vecteur de translation
074      */
075     public void translater(double dx, double dy) {
076         this.extremite1.translater(dx, dy);
077         this.extremite2.translater(dx, dy);
078     }
079 
080     /**
081      <code>afficher</code> permet d'afficher le segment.
082      */
083     public void afficher() {
084         System.out.println(this);
085     }
086 
087     /**
088      <code>toString</code> renvoie une chaine de caracteres (un
089      * objet de type <code>String</code>) representant le segment.
090      *
091      @return un objet de type <code>String</code> representant
092      *         le segment. Pour un segment compose des deux points
093      *         <code>(1,0)</code> et <code>(2,3)</code>, cet objet
094      *         representera la chaine <code>[(1,0);(2,3)]</code>
095      */
096     @Override public String toString() {
097         return ("[" this.extremite1 + ";" this.extremite2 + "]");
098     }
099 
100     /**
101      * Recalculer la longueur du segment.
102      */
103     @Override public void miseAJour() {
104           this.longueur = this.extremite1.distance(this.extremite2);
105     }
106 }