美文网首页
计算多边形的面积

计算多边形的面积

作者: lxr_ | 来源:发表于2022-10-01 17:50 被阅读0次

参考:https://zhuanlan.zhihu.com/p/285544731
思路:
(1)将多边形分为很多个三角形计算
(2)已知三个顶点计算两条边向量
(3)利用向量叉积的几何意义(两个向量的叉积为这两个向量组成的平行四边形的面积)计算三角形面积
(4)这样计算得到的面积是有向面积(有正有负),故可以用于计算凹多边形的面积

#include <iostream>
#include <vector>
using namespace std;

//已知三角形三个顶点坐标,计算三角形面积(这个面积是有向的:有正有负,故可以用来计算凹多边形的面积)
float CalculateTriangle(vector<pair<int, int>> vertex)
{
    //计算两个边对应的向量
    int v12_x = vertex[1].first - vertex[0].first;
    int v12_y = vertex[1].second - vertex[0].second;

    int v13_x = vertex[2].first - vertex[0].first;
    int v13_y = vertex[2].second - vertex[0].second;

    return(v12_x * v13_y - v12_y * v13_x) / 2.0;            //利用向量叉积计算
}
//已知多边形各个顶点,计算多边形的面积
float CalculatePolygon(vector<pair<int, int>> vertex_polygon)
{
    float areas = 0.0;
    for (int i = 1; i < vertex_polygon.size() - 1; i++)
    {
        vector<pair<int, int>> vertex;
        vertex.push_back(vertex_polygon[0]);
        vertex.push_back(vertex_polygon[i]);
        vertex.push_back(vertex_polygon[i + 1]);

        areas += CalculateTriangle(vertex);
    }
    return areas;
}

int main(int argc, char** argv)
{
    //构造一个三角形的三个顶点(顺时针)
    vector<pair<int, int>> vertex;
    vertex.push_back(make_pair(1, 0));
    vertex.push_back(make_pair(3, 0));
    vertex.push_back(make_pair(2, 3));

    cout << CalculateTriangle(vertex) << endl;

    //计算多边形
    vector<pair<int, int>> vertex_polygon;
    vertex_polygon.push_back(make_pair(0, 0));
    vertex_polygon.push_back(make_pair(1, 0));
    vertex_polygon.push_back(make_pair(1, 1));
    vertex_polygon.push_back(make_pair(0, 1));
    cout << CalculatePolygon(vertex_polygon) << endl;

    //一个凹的六边形
    vector<pair<int, int>> vertex_polygon_six;
    vertex_polygon_six.push_back(make_pair(1, 1));
    vertex_polygon_six.push_back(make_pair(4, 1));
    vertex_polygon_six.push_back(make_pair(3, 2));
    vertex_polygon_six.push_back(make_pair(4, 3));
    vertex_polygon_six.push_back(make_pair(1, 3));
    vertex_polygon_six.push_back(make_pair(2, 2));

    cout << CalculatePolygon(vertex_polygon_six) << endl;

    return 0;
}

相关文章

  • ArcGIS 计算面要素A中含有面要素B的比例

    问题描述:A为白色的泰森多边形面,B为粉色的城区面积,如何计算每个泰森多边形的城区面积占比? 步骤: 相交利用相交...

  • 计算多边形的面积

    参考:https://zhuanlan.zhihu.com/p/285544731[https://zhuanla...

  • GEE面积过滤器

    计算多边形面积属性用于过滤多边形对象 主要功能 找出美国所有面积小于3000平方千米的县 代码 步骤分析 使用已有...

  • 地理多边形面积计算

    有个使用leaflet.pm绘制多边形后计算面积的需求,绘制后拿到的点阵信息如下: 搜索解决方法有以下几种:1、使...

  • Turf 地图地理空间分析

    简介 地理空间分析库,处理各种地图算法 效果图 引入 计算沿线的点 计算区域面积 计算边界框 计算多边形 更多案例...

  • codeforces-1C Ancient Berland Ci

    题意:给定一个正多边形三点坐标,求能组成的正多边形的最小面积。思路:1、根据三点坐标计算三边长度,然后计算该三点所...

  • 计算任意多边形的面积

    需求 线段:算出地图上线段的实际长度面积:算出地图上不规则多边形的实际面积 解决方案 1.线段的实际长度 直接使用...

  • 5分钟理解外积计算多边形面积

    在矢量结构下,面状物体用其轮廓线构成的多边形表示,对于简单多边形,设有n个顶点,面积计算公式为: 公式如何得来的呢...

  • 极限法的思考

    1. 极限的起源 古代人们在解决圆的面积或圆周率计算问题时,通常取圆的内接正多边形的面积来近似表示圆的面积,进而计...

  • DEM按照海拔提取等高线对应湖面方法总结

    处理思路 我们用DEM进行对应海拔的湖面面积及水量变化计算之时,可以用矢量多边形投影来获取研究区的面积; 具体步骤...

网友评论

      本文标题:计算多边形的面积

      本文链接:https://www.haomeiwen.com/subject/xfjdartx.html