Point.java
001 package fr.isae.geometry;
002 
003 /**
004  <code>Point</code> definit une classe point mathematique dans un
005  * plan qui peut est dans un repere cartesien.<BR>
006  * Un point peut etre translate. Sa distance par rapport a un autre
007  * point peut etre obtenue.
008  *
009  @author <a href="mailto:garion@isae.fr">Christophe Garion</a>
010  @version 1.0
011  */
012 public class Point {
013     private double x;
014     private double y;
015 
016     /**
017      * La valeur servant a comparer des <code>double</code> entre eux.
018      */
019     public static final double EPS = 10E-9;
020 
021     /**
022      * Une constante representant le point a l'origine.
023      */
024     public static final Point ORIGINE = new Point(0.00.0);
025 
026     /**
027      * Cree une nouvelle instance de <code>Point</code>.
028      *
029      @param x un <code>double</code> representant l'abscisse du
030      *          point a creer
031      @param y un <code>double</code> representant l'ordonnee du
032      *          point a creer
033      */
034     public Point(double x, double y) {
035         this.x = x;
036         this.y = y;
037     }
038 
039     /**
040      * La valeur de l'abscisse du point.
041      *
042      @return un <code>double</code>  qui est l'abscisse du point
043      */
044     public double getX() {
045         return this.x;
046     }
047 
048     /**
049      * Changer la valeur de l'abscisse du point.
050      *
051      @param x un <code>double</code> qui est la nouvelle abscisse
052      */
053     public void setX(double x) {
054         this.x = x;
055     }
056 
057     /**
058      * La valeur de l'ordonnee du point.
059      *
060      @return un <code>double</code> qui est l'ordonnee du point
061      */
062     public double getY() {
063         return this.y;
064     }
065 
066     /**
067      * Changer la valeur de l'ordonnee du point.
068      *
069      @param y un <code>double</code> qui est la nouvelle ordonnee
070      */
071     public void setY(double y) {
072         this.y = y;
073     }
074 
075     /**
076      * La valeur du module du point.
077      *
078      @return un <code>double</code> qui est la valeur du module.
079      */
080     public double getModule() {
081         return (Math.sqrt(this.x * this.x + this.y * this.y));
082     }
083 
084     /**
085      * Changer la valeur du module du point.
086      *
087      @param module la nouvelle valeur du module du point. <b>Elle
088      *               doit etre positive.</b>
089      */
090     public void setModule(double module) {
091         double ancienModule = getModule();
092 
093         if (ancienModule < EPS) {
094             this.x = module;
095         else {
096             this.x = (this.x * module/ ancienModule;
097             this.y = (this.y * module/  ancienModule;
098         }
099     }
100 
101     /**
102      * La valeur de l'argument du point.
103      *
104      @return un <code>double</code> qui est la valeur de l'argument.
105      */
106     public double getArgument() {
107         if (this.getModule() < EPS) {
108             return 0;
109         }
110 
111         double ancienArg = Math.acos(this.x / this.getModule());
112 
113         if (this.y < 0) {
114             return (-1.0 * ancienArg);
115         }
116 
117         return ancienArg;
118     }
119 
120     /**
121      * Changer la valeur de l'argument du point.
122      *
123      @param argument la nouvelle valeur de l'argument du point.
124      */
125     public void setArgument(double argument) {
126         double ancienModule = this.getModule();
127         x = ancienModule * Math.cos(argument);
128         y = ancienModule * Math.sin(argument);
129     }
130 
131     /**
132      <code>translater</code> permet de translater le point.
133      *
134      @param dx un <code>double</code> qui represente l'abscisse du
135      *           vecteur de translation
136      @param dy un <code>double</code> qui represente l'ordonnee du
137      *           vecteur de translation
138      */
139     public void translater(double dx, double dy) {
140         this.x = this.x + dx;
141         this.y = this.y + dy;
142     }
143 
144     /**
145      <code>afficher</code> permet d'afficher les coordonnees du point.
146      */
147     public void afficher() {
148         System.out.println(this);
149     }
150 
151     /**
152      <code>toString</code> renvoie un objet de type <code>String</code>
153      * qui represente une chaine de caracteres representant le point.
154      *
155      @return un objet de type <code>String</code> representant
156      *         le point. Pour un point de coordonnees (2,3), cet objet
157      *         representera la chaine <code>(2,3)</code>.
158      */
159     @Override public String toString() {
160         return ("(" this.x + "," this.y + ")");
161     }
162 
163     /**
164      <code>distance</code> permet de calculer la distance entre deux
165      * points.
166      *
167      @param p un <code>Point</code> qui est l'autre point pour calculer
168      *          la distance
169      @return un <code>double</code> qui est la distance entre les deux
170      *         point
171      */
172     public double distance(Point p) {
173         return (Math.sqrt(((this.x - p.x(this.x - p.x)) +
174                           ((this.y - p.y(this.y - p.y))));
175     }
176 
177     /**
178      <code>equals</code> permet de verifier si deux points sont egaux, i.e.
179      * s'ils ont les memes coordonnees.
180      *
181      @param o un <code>Object</code> qui est l'objet dont on veut verifier s'il
182      *          est egal a <code>this</code>
183      @return un <code>boolean</code> qui est <code>true</code> si <code>o</code>
184      *         est un point egal a <code>this</code>
185      */
186     @Override public boolean equals(Object o) {
187         if ((instanceof Point)) {
188             return false;
189         }
190 
191         return (this.x == ((Pointo).x&& (this.y == ((Pointo).y);
192     }
193 
194     /**
195      <code>clone</code> permet d'obtenir une copie de <code>this</code>. On obtient
196      * un nouveau point avec des coordonnees identiques.
197      *
198      @return un <code>Point p</code> tel que <code>this != p</code> et
199      *         <code>this.equals(p)</code>
200      */
201     public Point clone() {
202         return new Point(this.x, this.y);
203     }
204 }