Формула Гаусса (метод трапеций) для вычисления площади произвольного многоугольника
n = int(input())
A = [list(map(int, input().split())) for _ in range(n)]
z = 0
for i in range(n - 1):
z += A[i][0] * A[i + 1][1] - A[i + 1][0] * A[i][1]
z += A[-1][0] * A[0][1] - A[0][0] * A[-1][1]
z = abs(z) / 2
print(z)
#include <bits/stdc++.h>
using namespace std;
int main() {
int n;
cin >> n;
vector<pair<double, double>> points(n);
for (int i = 0; i < n; i++) {
cin >> points[i].first >> points[i].second;
}
double area = 0;
for (int i = 0; i < n; i++) {
int j = (i + 1) % n;
area += points[i].first * points[j].second;
area -= points[j].first * points[i].second;
}
area = abs(area) / 2.0;
cout << area << endl;
return 0;
}
Площадь произвольного многоугольника, заданного последовательностью вершин (в порядке обхода), вычисляется по формуле:
Пусть вершины квадрата: (0,0), (1,0), (1,1), (0,1)
Сумма = 0·0 + 1·1 + 1·1 + 0·0 - (0·1 + 0·1 + 1·0 + 1·0) = 0+1+1+0 - (0+0+0+0) = 2
Площадь = |2|/2 = 1
Ввод:
n — количество вершинx₁ y₁ — координаты 1-й вершиныx₂ y₂ — координаты 2-й вершиныВывод:
4
0 0
1 0
1 1
0 1
Вывод: 1.0
4
0 0
3 0
3 2
0 2
Вывод: 6.0
Введите количество вершин и их координаты: