/** * MyPoint2D * rappresenta un punto nel piano cartesiano * * @autor Adriano Luchetta * @version 09-Nov-2007 * @version 30-Ott-2006 * */ import java.util.Locale; public class MyPoint2D { private double x; // ascissa private double y; // ordinata /** costruttore @param px ascissa del punto @param py ordinata del punto */ public MyPoint2D(double px, double py) { x = px; y = py; } /** restituisce l'ascissa del punto @return l'acsissa del punto */ public double getX() { return x; } /** restituisce l'ordinata del punto @return l'ordinata del punto */ public double getY() { return y; } /** restituisce il punto medio fra due punti @return il punto medio fra due punto @throws IllegalArgumentException se il parametro vale null */ public MyPoint2D middlePoint(MyPoint2D q) { if (q == null) throw new IllegalArgumentException(); return new MyPoint2D((x + q.x) / 2, (y + q.y) / 2); } /** trasla il punto @param dx traslazione lungo l'asse x @param dy traslazione lungo l'asse y @return il punto traslato */ public MyPoint2D translate(double dx, double dy) { return new MyPoint2D(x + dx, y + dy); } /** ruota il punto con centro di rotazione nell'origine degli assi @param alpha angolo di rotazione @return il punto ruotato */ public MyPoint2D rotate(double alpha) { MyPoint2D origine = new MyPoint2D(0, 0); return rotate(alpha, origine); } /** ruota il punto con centro di rotazione in un generico punto R @param alpha angolo di rotazione @param r il punto di rotatione @return questo punto ruotato @throws IllegalArgumentException se il parametro r vale null */ public MyPoint2D rotate(double alpha, MyPoint2D r) { if (r == null) throw new IllegalArgumentException(); double qx = r.x + (x - r.x) * Math.cos(alpha) - (y - r.y)* Math.sin(alpha); double qy = r.y + (x - r.x) * Math.sin(alpha) + (y - r.y)* Math.cos(alpha); return new MyPoint2D(qx, qy); } /** genera la descrizione testuale del punto, usando per i numeri frazionari solo due decimali e il punto come separatore @return descrizione testuale */ public String toString() { return String.format(Locale.US, "P(%.2f, %.2f)", x, y); } }