求多边形的面积

http://acm.hdu.edu.cn/showproblem.php?pid=1115

定理1 已知三角形△A1A2A3的顶点坐标Ai ( xi , yi ) ( i =1, 2, 3) 。它的重心坐标为:

                  xg = (x1+x2+x3) / 3 ;   yg = (y1+y2+y3) / 3 ;

定理2 已知三角形△A1A2A3的顶点坐标Ai ( xi , yi ) ( i =1, 2, 3) 。该三角形的有向面积为:

                  S =  ( (x2 - x1) * (y3 - y1) - (x3 - x1) * (y2 - y1) ) / 2 ;

  △A1A2A3 边界构成逆时针回路时取+

#include <iostream>

#include <cmath>

#include <cstdio>

#include <algorithm>

using namespace std;

struct point{

    double x,y;

};

double area(point p1,point p2,point p3)

{

    return ((p2.x-p1.x)*(p3.y-p1.y)-(p2.y-p1.y)*(p3.x-p1.x))/2;

}

int main()

{

    int n,t;

    cin>>t;

    while(t--)

    {

        scanf("%d",&n);

        point p1,p2,p3;

        double sum_x=0,sum_y=0,sum_area=0,s;

        scanf("%lf%lf",&p1.x,&p1.y);

        scanf("%lf%lf",&p2.x,&p2.y);

        for(int i=2;i<n;i++)

        {

            scanf("%lf%lf",&p3.x,&p3.y);

            s=area(p1,p2,p3);

            sum_area+=s;

            sum_x+=(p1.x+p2.x+p3.x)*s;

            sum_y+=(p1.y+p2.y+p3.y)*s;

            p2=p3;

        }

        printf("%.2lf %.2lf\n",sum_x/sum_area/3,sum_y/sum_area/3);

    }

    return 0;

}

 

你可能感兴趣的:(求多边形的面积)