原题戳这儿:链接
思路:将多边形切割为多个三角形,进行面积累计求和
算法(三角形万能公式):
设A(x1,y1),B(x2,y2),C(x3,y3) ,由A-->B-->C-->A 按逆时针方向转。
设三角形的面积为S,则S=(1/2)*(下面行列式)
|x1 y1 1|
|x2 y2 1|
|x3 y3 1|
S=(1/2)*(x1*y2+x2*y3+x3*y1-x1*y3-x2*y1-x3*y2)
即用三角形的三个顶点坐标求其面积的公式为: S=(1/2)*(x1*y2+x2*y3+x3*y1-x1*y3-x2*y1-x3*y2)
代码:
#include<stdio.h>
int main()
{
int x[100],y[100],n,i,x1,y1,x2,y2,x3,y3;
double s;
while(~scanf("%d",&n)&&n)
{
for(i=s=0;i<n;i++)
scanf("%d%d",&x[i],&y[i]);
x1=x[0],y1=y[0];
for(i=1;i<n-1;i++)
{
x2=x[i],y2=y[i];
x3=x[i+1],y3=y[i+1];
s+=(double)(x1*y2+x2*y3+x3*y1-x1*y3-x2*y1-x3*y2)/2.0;
}
printf("%.1f\n",s);
}
return 0;
}