/** * MyPoint2D * rappresenta un punto nel piano cartesiano * * @author Adriano Luchetta * @version 25-10-2007 * */ public class MyPoint2D { //variabili di esemplare private double x; private double y; /** inizializza l'ascissa e l'ordinata del punto @param aX ascissa @param aY ordinata */ public MyPoint2D(double aX, double aY) { x = aX; y = aY; } /** calcola la distanza fra due punti @param q punto per il calcolo della distanza @return distanza fra due punti */ public double distance(MyPoint2D q) { double dquadro = (x - q.x) * (x - q.x) + (y - q.y) * (y - q.y); return Math.sqrt(dquadro); } /** calcola il punto medio fra due punti @param q punto per il calcolo del punto medio @return punto medio */ public MyPoint2D mediumPoint(MyPoint2D q) { double xm = (x + q.x) / 2; double ym = (y + q.y) / 2; MyPoint2D tmp = new MyPoint2D(xm, ym); return tmp; } /** descrizione testuale nella forma (x, y) @return descrizione testuale */ public String toString() { return "(" + x + ", " + y + ")"; } /** genera un punto traslando questo punto @param deltaX traslazione lungo l'asse x @param deltaY traslazione lungo l'asse y @return il punto ottenuto traslando questo punto */ public MyPoint2D translate(double deltaX, double deltaY) { MyPoint2D p = new MyPoint2D(x + deltaX, y + deltaY); return p; } /** verifica se due punti sono coincidenti @param q il punto da confrontare @return true se i due punti coincidono, false altrimenti */ public boolean isCoincident(MyPoint2D q) { return approxEquals(x, q.x) && approxEquals(y, q.y); } private static boolean approxEquals(double a, double b) { final double EPSILON = 1E-14; return Math.abs(a - b) <= EPSILON * Math.max(Math.abs(a), Math.abs(b)); } }