给你一个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;
}
没细看,不过海伦公式 会丢失精度 ,尽量不要用。。