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