杭电ACM 2036题!!不知道为什么不能AC??

2024-11-25 12:21:07
推荐回答(2个)
回答1:

给你一个case 

12 1 0 2 0 2 1 3 1 3 2 2 2 2 3 1 3 1 2 0 2 0 1 1 1

结果是5 // 这多边形是凹的。

 

这题不能用海伦公式做,不是因为精度问题,而是海伦公式不方便计算多边形面积。

当是凸多边形时, 可以使用海伦公式计算。

当时凹多边形时, 则不可以用海伦公式计算, 应用叉积计算多边形面积。

这是wiki上 计算多边形的公式。 其原理就是利用叉积。 

#include 

#include 

typedef struct

{

    int x;

    int y;

}point;

int cross_product (point a, point b);

int main()

{

    int i;

    int n;

    double area;

    point a, b, s;

    while (scanf ("%d", &n) == 1 && n)

    {

        area = 0;

        scanf ("%d%d", &a.x, &a.y);

        s = a;

        for (i = 1; i < n; i ++)

        {

            b = a;

            scanf ("%d%d", &a.x, &a.y);

            area += cross_product (b, a);

        }

        area += cross_product (a, s);

        printf ("%0.1lf\n", fabs (area * 0.5));

    }

    return 0;

}

int cross_product (point a, point b)

{

    return a.x * b.y - b.x * a.y;

}

回答2:

没细看,不过海伦公式 会丢失精度 ,尽量不要用。。