计算多边形面积,这个题目比较简单,练习一下多边形面积的求法
就是从第一个顶点开始,顺序连接顺序的两个顶点求三角形面积
这里有个问题,如果是凸多边形,一看就知道这个算法是正确的
但是如果不是凸多边形呢,其实这个结论还是正确的,因为计算
多出来的负的面积,和计算多出来的正的面积会正好抵消,这个
结论话画个图演示一下就OK了!
#include <iostream>
#include <stdio.h>
#include <string.h>
#include <algorithm>
using namespace std;
struct point
{
double x;
double y;
}po[200];
double xmult(point &a,point &b,point &c)
{
return (b.x-a.x)*(c.y-a.y) - (c.x-a.x)*(b.y-a.y);
}
double cal_p_area(int n)
{
int i,j,k;
double ans;
for(i=1;i<n-1;i++)
{
ans+=xmult(po[0],po[i],po[i+1]);
}
return ans;
}
int main()
{
int i,j,k,n;
while(scanf("%d",&n),n)
{
for(i=0;i<n;i++)
scanf("%lf%lf",&po[i].x,&po[i].y);
printf("%.1lf\n",cal_p_area(n)/2);
}
return 0;
}