hdoj 2036 求多边形面积

题目在这里: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);
    }
} 
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容