题目在这里:2036 改革春风吹
这题的目的就是求多边形的面积,求多边形的面积是通过将多边形分割成多个三角形,然后求多个三角形的面积和,就能得到多边形的面积。
而求三角形的面积S=a * b由于题目是逆时针给的坐标,所以用向量求得的结果就是正数,如果是顺时针的话,求得的结果就是负数。
如图是将左边转换为行列式后,行列式的运算:
2036运算.jpg
2036分割.jpg
ad1cd6d249812ee532f291d8cbf48b1.jpg
我们可以看到,这个多边形的面积应该是SABC+SACD-SADE
因为在输入时,先输入D的坐标再输入E的坐标,那么当我读取这些坐标的时候,对于三角形ADE来讲,就是顺时针了,所以用行列式求出来的值就是负数。
将x值存放在数组a中,y值存放在数组b中,对于求每个三角形的面积,永远都要用到x0,y0。
#include <stdio.h>
int main(){
int a[100],b[100];
int i;
int n;
double ans,tan;
while(~scanf("%d",&n)&&n){
ans=0;
for(i=0;i<n;i++){
scanf("%d%d",&a[i],&b[i]);
}
for(i=1;i<n-1;i++){
tan=(a[0]*b[i]+a[i]*b[i+1]+a[i+1]*b[0]-a[i+1]*b[i]-a[i]*b[0]-a[0]*b[i+1])/2.0;
ans=ans+tan;
}
printf("%.1f\n",ans);
}
}