HDU2036

题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2036

题目要求:
求多边形面积

思路:

分割

如图,对所有相邻坐标点与原点构成的三角形进行矢量求和即是面积;
由平行四边形的面积计算公式可得单个三角形的面积公式:(x1y2-y1x2)/2;
此题的坐标为逆时针顺序,不必取反。

代码:

#include 
int main()
{
    int n, i;
    while (scanf("%d", &n) != EOF)
    {
        if (n == 0) {}
        else
        {
            int x[100], y[100];
            double ans = 0;
            for (i = 1; i <= n; i++)
            {
                scanf("%d", &x[i]);
                scanf("%d", &y[i]);
            }
            x[n + 1] = x[1];
            y[n + 1] = y[1];    //最后一点与第一点相连
            for (i = 1; i <= n; i++)
            {
                ans += (x[i] * y[i + 1] - y[i] * x[i + 1]) / 2.0;    //面积公式
            }
            printf("%.1f\n", ans);
        }
    }
}

你可能感兴趣的:(HDU2036)