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