Решение задачи Площадь многоугольника с Меньшиков

Без пояснения   Просмотров: 92


Многоугольник на плоскости задан целочисленными координатами своих N вершин в декартовой системе координат. Требуется найти площадь многоугольника. Стороны многоугольника не соприкасаются (за исключением соседних - в вершинах) и не пересекаются.

Код

#include <iostream>
#include <vector>
 
using namespace std;
 
struct point
{
    int x,y;
    point(){}
    point(int X, int Y)
    {
        x = X;
        y = Y;
    }
    point(point a, point b)
    {
        x = b.x - a.x;
        y = b.y - a.y;
    }
};
int n;
vector<point> mas;
void input()
{
    cin>>n;
    mas.resize(n);
    for (int i=0;i<n;i++)
        cin>>mas[i].x>>mas[i].y;
}
int findS(point a, point b, point c)
{
    point v1(b,a);
    point v2(c,a);
    return v1.x*v2.y - v2.x*v1.y;
}
void solve()
{
    int S = 0; // итоговая площадь
    point base = mas[0];
    for (int i=1;i<n-1;i++)
        S += findS(base, mas[i],mas[i+1]);
    if (S<0) S = -S;
    printf("%0.1f",(double)S/2);
}
int main()
{
    input();
    solve();
    return 0;
}

         

Администратор Photo Автор: Администратор




Комментарии

Чтобы написать комментарии вам нужно войти в систему или зарегистрироваться