计算任意多边形的面积

以三角形为例
设A(x1,y1),B(x2,y2),C(x3,y3) 

由A-->B-->C-->A 按逆时针方向转。
设三角形的面积为S
则S=(1/2)*(下面行列式)
|x1 y1 1|
|x2 y2 1|
|x3 y3 1|
S=(1/2)*(x1y2*1+x2y3*1+x3y1*1-x1y3*1-x2y1*1-x3y2*1)
即用三角形的三个顶点坐标求其面积的公式为:
S=(1/2)*(x1y2+x2y3+x3y1-x1y3-x2y1-x3y2)

多边形如下:

设Ω是m边形(如下图),顶点沿边界正向排列,,坐标依次为

建立Ω的多边形区域向量图。

由图知坐标原点与多边形任意相邻的两个顶点构成一个三角形,而三角形的面积可由三个顶点构成的两个平面向量的外积求得。

任意多边形的面积公式

多边形计算公式的计算和原点的选取没有关系,通常可以选点(0,0)或者多边形的第一个点(这个时候比较直观了,看起来就是把多边形分成一个个三角形和加起来,读者自己可以画个图)就可以了。

//任意多边形的面积计算  

#include <iostream>  
#include <utility>  
#include <cmath>  
using std::cout;
using std::cin;
using std::endl;

typedef std::pair<double, double> point;

#pragma warning(disable:4244)  

double det(point p0, point p1, point p2)
{
    return (p1.first - p0.first)*(p2.second - p0.second) - (p1.second - p0.second)*(p2.first - p0.first);
}

double ploygon_area(int n, point p[])
{
    double s = 0.0f;
    int i = 1;
    for (;i < n - 1;i++)
        s += det(p[0], p[i], p[i + 1]);
    return 0.5*fabs(s);
}

int main(int argc, char *argv[])
{

    int i, n;
    double s;
    point *points = NULL;

    cout << "Enter the number of edges of the polygon <n>:";
    cin >> n;
    if (n < 2) {
        exit(1);
    }

    points = (point *)malloc(n * sizeof(point));

    for (i = 0; i<n; i++) {
        cout << endl << "points[" << i << "]=";
        cin >> points[i].first >> points[i].second;
    }

    s = ploygon_area(n, points);
    cout << "The area is:" << s << std::endl;

    if (points)
        free(points);

    return 1;
}

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值