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