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