88 lines
2.3 KiB
Java
88 lines
2.3 KiB
Java
|
/**
|
||
|
* Classe che simula un poligono
|
||
|
* @author radaelli11353
|
||
|
*/
|
||
|
public class Polygon {
|
||
|
public final int MAX_DIM;
|
||
|
private double[] x;
|
||
|
private double[] y;
|
||
|
private int actualDim;
|
||
|
|
||
|
/**
|
||
|
* Costruttore
|
||
|
* @param dim Dimensione massima dell'array
|
||
|
* @param x0 X del primo punto
|
||
|
* @param y0 Y del primo punto
|
||
|
*/
|
||
|
public Polygon(int dim, double x0, double y0) {
|
||
|
MAX_DIM = dim;
|
||
|
x = new double[MAX_DIM];
|
||
|
y = new double[MAX_DIM];
|
||
|
actualDim = 0;
|
||
|
this.add(x0, y0);
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* Metodo che aggiunge un punto al poligono
|
||
|
* @param xn X del nuovo punto da inserire
|
||
|
* @param yn Y del nuovo punto da inserire
|
||
|
*/
|
||
|
public void add(double xn, double yn) {
|
||
|
if(actualDim >= MAX_DIM) throw new IllegalArgumentException("Il numero massimo di vertici è stato raggiunto (" + MAX_DIM + ")");
|
||
|
x[actualDim] = xn;
|
||
|
y[actualDim] = yn;
|
||
|
actualDim++;
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* Metodo che calcola il perimetro del poligono
|
||
|
* @return Perimetro del poligono
|
||
|
*/
|
||
|
public double perimeter() {
|
||
|
double dx, dy;
|
||
|
double perimeter = 0;
|
||
|
for(int i = 0; i < actualDim; i++) {
|
||
|
if(i != actualDim - 1) {
|
||
|
dx = x[i] - x[i+1];
|
||
|
dy = y[i] - y[i+1];
|
||
|
} else {
|
||
|
dx = x[i] - x[0];
|
||
|
dy = y[i] - y[0];
|
||
|
}
|
||
|
|
||
|
perimeter += Math.sqrt(dx*dx + dy*dy);
|
||
|
}
|
||
|
return perimeter;
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* Metodo che restituisce l'area del poligono
|
||
|
* @return Area del poligono
|
||
|
*/
|
||
|
public double area() {
|
||
|
double sum = 0;
|
||
|
for(int i = 0; i < actualDim - 1; i++) {
|
||
|
sum += x[i] * y[i+1];
|
||
|
}
|
||
|
sum += x[actualDim - 1] * y[0];
|
||
|
for(int i = 0; i < actualDim - 1; i++) {
|
||
|
sum -= y[i] * x[i+1];
|
||
|
}
|
||
|
sum -= y[actualDim - 1] * x[0];
|
||
|
|
||
|
return sum/2;
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* Metodo toString della classe
|
||
|
* @return Stringa contenente i vertici del poligono
|
||
|
*/
|
||
|
@Override
|
||
|
public String toString() {
|
||
|
String text = "Punti: ";
|
||
|
for(int i = 0; i < actualDim; i++) {
|
||
|
text += x[i] + "," + y[i] + "; ";
|
||
|
}
|
||
|
return text;
|
||
|
}
|
||
|
}
|