hdu 2036 求多边形面积

本文详细介绍了如何使用向量叉乘原理计算多边形面积,并提供了代码实现及样例输入输出说明。

地址: hdu2036


Input

输入数据包含多个测试实例,每个测试实例占一行,每行的开始是一个整数n(3<=n<=100),它表示多边形的边数(当然也是顶点数),然后是按照逆时针顺序给出的n个顶点的坐标(x1, y1, x2, y2... xn, yn),为了简化问题,这里的所有坐标都用整数表示。
输入数据中所有的整数都在32位整数范围内,n=0表示数据的结束,不做处理。

Output

对于每个测试实例,请输出对应的多边形面积,结果精确到小数点后一位小数。
每个实例的输出占一行。

Sample Input

3 0 0 1 0 0 1
4 1 0 0 1 -1 0 0 -1
0
Sample Output

0.5
2.0

<pre name="code" class="cpp">#include<iostream>  
using namespace std;  
struct point  
{  
    double x,y;  
} P[101];  
  
double cross(point a,point b)  
{  
    return a.x*b.y-a.y*b.x;  
}  
  
double area(int n)  
{  
    double tmp=0;  
      
    for(int i=0;i<n;i++)  
    {  
        tmp+=cross(P[i],P[i+1]);  
    }  
    return tmp/2.00;  
}  
  
int main()  
{  
    int i,n;  
    while(scanf("%d",&n),n)  
    {  
        for(i=0;i<n;i++)  
            scanf("%lf%lf",&P[i].x,&P[i].y);  
        P[n].x=P[0].x;P[n].y=P[0].y;  
    //  for(i=0;i<n;i++)  
    //      printf("P%d\t%.1lf %.1lf\n",i+1,P[i].x,P[i].y);  
        printf("%.1lf\n",area(n));  
    }  
    return 0;  
}  


 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值