Rettangolo

Tutti i Progetti
public class Punto {
    private double x;
    private double y;

    public Punto(double x, double y) {
        this.x = x;
        this.y = y;
    }

    public Punto(Punto p) {
        this.x = p.x;
        this.y = p.y;
    }

    public void setX(double x) {
        this.x = x;
    }

    public void setY(double y) {
        this.y = y;
    }

    public double getX() {
        return x;
    }

    public double getY() {
        return y;
    }

    public double distanza(Punto p) {
        double dx = this.x - p.x;
        double dy = this.y - p.y;
        return Math.sqrt(dx * dx + dy * dy);
    }

    public boolean equals(Punto p) {
        return this.x == p.x && this.y == p.y;
    }

    @Override
    public String toString() {
        return "(" + x + ", " + y + ")";
    }
    public static void main(String[] args) {
        Punto p1 = new Punto(3.0, 4.0);
        Punto p2 = new Punto(0.0, 0.0);
        Punto p3 = new Punto(p1);
    
        System.out.println("p1: " + p1);
        System.out.println("p2: " + p2);
        System.out.println("p3: " + p3);
    
        System.out.println("space tra p1 e p2: " + p1.distanza(p2));
        
        System.out.println("p1 == p2: " + p1.equals(p2));
        System.out.println("p1 == p3: " + p1.equals(p3));
    
        p2.setX(3.0);
        p2.setY(4.0);
        System.out.println("p2: " + p2);
        System.out.println("p1 == p2: " + p1.equals(p2));
    }
}
public class Rettangolo {
    private double base;
    private double altezza;
    private Punto centro;

    // costruttore
    public Rettangolo(double base, double altezza, Punto centro) {
        this.base = base;
        this.altezza = altezza;
        this.centro = centro;
    }

    // getter e setter
    public double getBase() { return base; }
    public void setBase(double base) { this.base = base; }

    public double getAltezza() { return altezza; }
    public void setAltezza(double altezza) { this.altezza = altezza; }
    
    public Punto getCentro() { return centro; }
    public void setCentro(Punto centro) { this.centro = centro; }

    public Punto[] calcolaVertici() {
        Punto[] vertici = new Punto[4];
        double b2 = base / 2;
        double h2 = altezza / 2;
        
        vertici[0] = new Punto(centro.getX() - b2, centro.getY() + h2); // A
        vertici[1] = new Punto(centro.getX() + b2, centro.getY() + h2); // B
        vertici[2] = new Punto(centro.getX() + b2, centro.getY() - h2); // C
        vertici[3] = new Punto(centro.getX() - b2, centro.getY() - h2); // D
        
        return vertici;
    }

    public boolean isInside(Punto a) {
        double xa = a.getX();
        double ya = a.getY();
        
        double minX = centro.getX() - base / 2;
        double maxX = centro.getX() + base / 2;
        double minY = centro.getY() - altezza / 2;
        double maxY = centro.getY() + altezza / 2;
        
        return (xa > minX && xa < maxX && ya > minY && ya < maxY);
    }
    public Punto minAss() {
        Punto[] vertici = calcolaVertici();
        Punto minPunto = vertici[0];
        double min = Math.sqrt(vertici[0].getX() * vertici[0].getX() + vertici[0].getY() * vertici[0].getY());
        
        for (int i = 1; i < vertici.length; i++) {
            double dist = Math.sqrt(Math.pow(vertici[i].getX(),2) + Math.pow(vertici[i].getY(), 2));
            if (dist < min) {
                min = dist;
                minPunto = vertici[i];
            }
        }
        
        return minPunto;
    }
    public static void main(String[] args) {
        Punto centro = new Punto(5, 14);
        Rettangolo r = new Rettangolo(7, 11, centro);
        
        Punto[] vertici = r.calcolaVertici();
        System.out.println("Vertici:");
        for (int i = 0; i < vertici.length; i++) {
            System.out.println((char)('A' + i) + ": " + vertici[i]);
        }
        
        Punto test = new Punto(6, 9);
        System.out.println("\nPunto (3,4) contenuto: " + r.isInside(test));
        
        Punto vicino = r.minAss();
        System.out.println("\nVertice più vicino all'origine: " + vicino);
    }
}

Output

p1: (3.0, 4.0) p2: (0.0, 0.0) p3: (3.0, 4.0) space tra p1 e p2: 5.0 p1 == p2: false p1 == p3: true p2: (3.0, 4.0) p1 == p2: true