1. В моем первом варианте была ошибка, я ее исправил. 2. Во код с этой формулой (за правильность формулы я не ручаюсь)
| Код | import static java.lang.Math.sqrt;
public class Polygon { public static final double RADIUS = 1.0;
private double[] x; private double[] y; private double area = Double.NaN; private double perimeter = Double.NaN;
public Polygon(double[] x, double[] y) { if(x.length != y.length || x.length <= 2) throw new IllegalArgumentException();
this.x = new double[x.length + 1]; System.arraycopy(x, 0, this.x, 0, x.length); this.x[x.length] = x[0];
this.y = new double[y.length + 1]; System.arraycopy(y, 0, this.y, 0, y.length); this.y[y.length] = y[0]; }
public double getArea() { if(Double.isNaN(area)) { area = 0; for(int i = 1; i < x.length; i++) area = (x[i - 1] - x[i]) * (y[i - 1] - y[i]); area /= 2.0; } return area; }
public double getPerimeter() { if(Double.isNaN(perimeter)) { perimeter = 0; for(int i = 1; i < x.length; i++) perimeter += sqrt((x[i - 1] - x[i]) * (x[i - 1] - x[i]) + (y[i - 1] - y[i]) * (y[i - 1] - y[i])); } return perimeter; } } |
|