n边形面积

输入n,表示边数,接着逆时针输入坐标,球多边形面积(注意多边形凹凸性!!!)

 

#include<stdio.h>   
int main( )  
{  
    int n;  
    while(scanf("%d",&n) && n)  
    {  
        int i;  
        float a[100][2],s=0;  
        scanf("%f %f",&a[0][0],&a[0][1]);  
        for(i=1;i<n;i++)  
        {  
            scanf("%f %f",&a[i][0],&a[i][1]);          
//选取(0,0)为基准点,用向量差乘法求每个三角形的面积   
            s+=a[i-1][0]*a[i][1]-a[i][0]*a[i-1][1];    
//x[i]*y[i+1]-x[i+1]*y[i]   累加之后变可得三角线面积   
        }                                              
//累加之后时凹三角形多出来的部分被消除了,   
        s+=a[0][1]*a[n-1][0]-a[0][0]*a[n-1][1];       
 //注意第一个点和最后一个点以及原点构成的三角形也要算进来   
        printf("%.1f\n",s/2);                         
 //注意差乘是有顺序的!!!谁在先谁在后都是有学问的   
    }                                              
  //要好好研究一下,不要知道了皮毛就拿去用   
    return 0;  
}  

 

posted @ 2012-12-27 13:23  再见~雨泉  阅读(210)  评论(0编辑  收藏  举报