Cod sursa(job #1671423)

Utilizator bogdanRUSURusu Bogdan bogdanRUSU Data 1 aprilie 2016 17:50:15
Problema Aria Scor 50
Compilator cpp Status done
Runda Arhiva educationala Marime 1.34 kb
#include <fstream>
#include <iomanip>

using namespace std;

ifstream fin("aria.in");
ofstream fout("aria.out");

struct cartezian
{
    double x,y;
};

double getTriArea(const cartezian &A, const cartezian &B, const cartezian &C)
{
    double d1 = A.x*B.y + B.x*C.y + C.x*A.y;
    double d2 = C.x*B.y + B.x*A.y + A.x*C.y;
    double area = d1 - d2;
    if(area < 0)
        area = (-1)*area;
    area /= (double)2;
    return area;
}

cartezian getCoordG (cartezian const *points, unsigned length)
{
    cartezian G;
    G.x = G.y = 0;

    for(unsigned i = 0; i < length; ++i)
    {
        G.x += points[i].x;
        G.y += points[i].y;
    }

    G.x /= length;
    G.y /= length;

    return G;
}

double computePoligonArea (cartezian const * points, unsigned length)
{
    unsigned i;
    double area = 0.0;

    cartezian G = getCoordG(points, length);

    for(i = 0; i < length; ++i)
    {
        area += getTriArea(G, points[i], points[(i + 1)%length]);
    }
    return area;
}

int main()
{
    unsigned length;
    fin >> length;

    cartezian *points = new cartezian[length];

    for(unsigned i = 0; i < length; ++i)
    {
        fin >> points[i].x >> points[i].y;
    }

    fout << fixed << setprecision(6) << computePoligonArea(points, length);

    delete[] points;
    return 0;
}