杭电2037题
#include <stdio.h>
int main(void)
{
int n,i;//n个坐标
double sum;//面积
int site[150][2];//每个坐标
while(scanf("%d",&n)!=EOF)//获得输入
{
if(n==0)
break;//0时跳出
for(i=0;i<n;i++)
scanf("%d %d",&site[i][1],&site[i][2]);//获得坐标输入
for(i=1,sum=0;i<n;i++)
sum+=(site[i-1][1]*site[i][2]-site[i-1][2]*site[i][1])*0.5;
sum+=(site[n-1][1]*site[0][2]-site[n-1][2]*site[0][1])*0.5;//面积计算
printf("%.1f\n",sum);//输出面积
}
return 0;
}
由这道可以得出经验:
1、任意多边形都可以用向量叉乘来得出,向量叉乘是有正负的,坐标向量叉乘公式:
(x1,y1)*(x2,y2)=x1*y2—x2*y1;