Написать класс "многоугольник", содержащий координаты его вершин в порядке обхода против часовой стрелки. Написать способы для вычисления периметра и площади многоугольника.
Ответы
Ответ:
Вот пример реализации класса "Многоугольник" на языке Java:
public class Polygon {
private Point[] vertices;
public Polygon(Point[] vertices) {
this.vertices = vertices;
}
public double perimeter() {
double perimeter = 0;
for (int i = 0; i < vertices.length; i++) {
int j = (i + 1) % vertices.length;
double dx = vertices[j].getX() - vertices[i].getX();
double dy = vertices[j].getY() - vertices[i].getY();
perimeter += Math.sqrt(dx * dx + dy * dy);
}
return perimeter;
}
public double area() {
double area = 0;
for (int i = 0; i < vertices.length; i++) {
int j = (i + 1) % vertices.length;
area += vertices[i].getX() * vertices[j].getY() - vertices[j].getX() * vertices[i].getY();
}
area *= 0.5;
return Math.abs(area);
}
}
В этом примере мы создали класс "Polygon" с конструктором, который принимает массив точек (объектов класса "Point") вершин многоугольника в порядке обхода против часовой стрелки и сохраняет его в приватном атрибуте "vertices".
Метод "perimeter" вычисляет периметр многоугольника, проходя по массиву вершин и вычисляя длину каждой стороны с помощью формулы расстояния между двумя точками в декартовой системе координат. Затем он складывает все длины сторон и возвращает результат.
Метод "area" вычисляет площадь многоугольника с помощью формулы Гаусса для вычисления площади многоугольника на плоскости. Он проходит по массиву вершин и вычисляет площадь треугольников, образованных вершинами и началом координат. Затем он складывает площади треугольников и возвращает результат.
Пример использования класса:
// Создаем многоугольник с вершинами (0,0), (0,1), (1,1), (1,0)
Point[] vertices = new Point[] { new Point(0, 0), new Point(0, 1), new Point(1, 1), new Point(1, 0) };
Polygon polygon = new Polygon(vertices);
// Вычисляем периметр и площадь многоугольника
double perimeter = polygon.perimeter();
double area = polygon.area();
// Выводим результаты
System.out.println("Периметр: " + perimeter);
System.out.println("Площадь: " + area);
Этот код выведет:
Периметр: 4.0
Площадь: 1.0