求任意多边形的面积

原理就是将每两个点组成一个梯形,利用梯形公式(上底+下底)*高/2,两两相加直到起点,

其中,ΔABC顶点A、B、C逆时针给出时有向面积为正,顺时针给出时有向面积为负。

如有(X1,Y1)(X2,Y2)(X3,Y3)(X1,Y1)
公式:(Y1+Y2)*(X2-X1)/2+(Y2+Y3)*(X3-X2)/2+(Y3+Y1)*(X1-X3)/2
以此类推就可以算出任意不规则图形的面积了

对于有n 个坐标组成的多边形:

#include<iostream>
#include<cstdio>
#include<cmath>
#include<algorithm>
using namespace std;
int main(){
    int m,n;
    int x[101],y[101];
    scanf("%d",&m);
    while(m--){
        double sum=0,num=0;
        scanf("%d",&n);
        for(int i=0;i<n;i++){
            scanf("%d %d",&x[i],&y[i]);
        }
        for(int i=0;i<n-1;i++){
            num=num+(y[i]+y[i+1])*(x[i+1]-x[i])/2.0;
        }
        sum=num+(y[n-1]+y[0])*(x[0]-x[n-1])/2.0;
        printf("%.6f",sum);
    }
}
 

任意给出一个三角形ΔABC,设其顶点坐标分别为A(x1, y1),B(x2, y2),C(x3, y3),那么根据线性代数的知识,ΔABC的有向面积可表示为:

其中,ΔABC顶点A、B、C逆时针给出时有向面积为正,顺时针给出时有向面积为负。

猜你喜欢

转载自blog.csdn.net/lijunyan5/article/details/81270705