Laboratorio di sistemi Classi Punto e Retta Java

Laboratorio di sistemi
Classi Punto e Retta
Java [NetBeans]
Dato il seguente diagramma UML, progettare le classi corrispondenti
/*
* Punto.java
*
* Created on 1 febbraio 2007, 20.10
*
* To change this template, choose Tools | Template Manager
* and open the template in the editor.
*/
package puntorettaconsoleapp;
/**
*
* @author standard
*/
public class Punto {
protected double x,y;
/** Costruttore: punto origine del sistema di assi */
public Punto() {
x=0;
y=0;
}
/** Overloading del Costruttore */
public Punto(double a, double b) {
x=a;
y=b;
}
PuntoRetta.pdf
Pag. 1/4
Cozzetto (C)
Laboratorio di sistemi
Classi Punto e Retta
Java [NetBeans]
/** Verifica se due punti sono uguali */
public boolean equals(Punto p) {
return (x==p.x && y==p.y);
}
/** Overloading del metodo toString */
public String toString() {
return "("+x+", "+y+")";
}
/** Stampa le coordinate del punto */
public void stampaPunto() {
System.out.println("Coordinate del punto: "+this.toString());
}
/** Distanza tra due punti */
public double distanza(Punto p) {
return Math.sqrt((x-this.x)*(x-this.x)+(y-this.y)*(y-this.y));
}
} // fine classe Punto
PuntoRetta.pdf
Pag. 2/4
Cozzetto (C)
Laboratorio di sistemi
Classi Punto e Retta
Java [NetBeans]
/*
* Retta.java
*
* Created on 1 febbraio 2007, 20.13
*
* To change this template, choose Tools | Template Manager
* and open the template in the editor.
*/
package puntorettaconsoleapp;
/**
*
* @author standard
*/
public class Retta {
protected Punto p0;
protected double m;
/** Costruttore nullo */
public Retta() {
//nulla
}
// Overloading del costruttore nullo
public Retta(Punto p0, double m) {
this.p0=p0;
this.m=m;
}
/** Overloading del costruttore precedente: individua la rella
passante per due punti */
public Retta(Punto p1, Punto p2) {
this(p1,(p2.y-p1.y)/(p2.x-p1.x));
}
/** Overloading del costruttore: individua la retta
* di coefficiente angolare c e termine noto t
*/
public Retta(double c, double t) {
this(new Punto(0,t),c);
}
/** Stabilisce se il punto p appartiene alla retta */
public boolean appartiene(Punto p) {
return (p.y-p0.y==m*(p.x-p0.x));
}
/** Verifica se due rette sono uguali */
public boolean equals(Retta r) {
return (this.appartiene(r.p0) && this.parallela(r));
}
PuntoRetta.pdf
Pag. 3/4
Cozzetto (C)
Laboratorio di sistemi
Classi Punto e Retta
Java [NetBeans]
/** Stabilisce il parallelismo tra rette */
public boolean parallela(Retta r) {
return (r.m==this.m);
}
/** Restituisce il coefficiente angolare della retta */
public double coefficienteAngolare() {
return m;
}
/** Restituisce il termine noto */
public double termineNoto() {
return p0.y-m*p0.x;
}
/** Trova il punto di intersezione tra due rette se esiste */
public Punto intersezione(Retta r) {
if (!this.parallela(r)) {
double x=(this.termineNoto()-r.termineNoto())/(r.coefficienteAngolare()this.coefficienteAngolare());
double y=r.coefficienteAngolare()*x+r.termineNoto();
return new Punto(x,y);
} else
return null;
}
/** Stabilisce se la retta è parallela all'asse delle X */
public boolean isParallelaAsseX() {
return (m==0);
}
/** Stabilisce se la retta è parallela all'asse delle Y */
public boolean isParallelaAsseY() {
return (m==Double.POSITIVE_INFINITY || m==Double.NEGATIVE_INFINITY);
}
/** Punto di intersezione con l'asse delle X, se esiste */
public Punto intersezioneAsseX() {
if (!this.isParallelaAsseX())
return new Punto(p0.x-p0.y/m,0);
else
return null;
}
/** Punto di intersezione con l'asse delle Y, se esiste */
public Punto intersezioneAsseY() {
if (!this.isParallelaAsseY())
return new Punto(0,p0.y-p0.x*m);
else
return null;
}
} // fine classe Retta
PuntoRetta.pdf
Pag. 4/4
Cozzetto (C)