多边形的面积
计算任意多边形的面积
以三角形为例。{
S_abc=fabs(S_oab+S_obc+S_oca)/2=fabs((向量OA X 向量OB)+(向量OB X 向量OC)+(向量OC X 向量OA))/2;
}
我们根据二维向量叉积计算三角形面积。
因为叉积为顺时针为负,逆时针为正,所以可扩展到n边形(凸凹形都可以)。
PS:必须输入的坐标以顺时针或者逆时针。
#include<bits/stdc++.h>
using namespace std;
const int maxn=1e6+10;
struct point{
double x,y;
// point (double xx=0,double yy=0):x(xx),y(yy){}
};
point a[maxn];
int n;//边的个数
double getarea(){
double area=0;
for(int i=1;i<=n;i++){
area+=a[i].x*a[i+1].y-a[i].y*a[i+1].x;
}
return fabs(area/2);
}
int main(){
scanf("%d",&n);
for(int i=1;i<=n;i++){
scanf("%lf%lf",&a[i].x,&a[i].y);
}
a[n+1]=a[1];
printf("%lf\n",getarea());
}