精华内容
下载资源
问答
  • 三角形面积计算

    2018-11-10 18:49:59
    任意三角形面积计算,还可以根据输入的三边长判断是不是三角形,如果不是三角形,程序会提醒
  • 任意多边形面积计算

    万次阅读 2015-09-11 10:01:03
    之前,应朋友所托,完成个四边形面积计算程序,于是不由自主考虑来个扩展,解决任意多边形面积的计算。  一开始想到了某定点的三角形剖分,但遇到凹凸多边形引发的多种情况,过于复杂,放弃。  后来想到用图形学...

    之前,应朋友所托,完成个四边形面积计算程序,于是不由自主考虑来个扩展,解决任意多边形面积的计算。

           一开始想到了某定点的三角形剖分,但遇到凹凸多边形引发的多种情况,过于复杂,放弃。

           后来想到用图形学中填充算法中的扫描线方法,切分成梯形与三角形,将交点存入活性边表后再计算面积,感觉也较复杂,放弃。

           再然后,找到个计算几何大神O’Rourke在1998年公开的成果。

    *(书名:Computational Geometry in C,第二版P20)*



    1-原理介绍

           上书中给出定理:

    任意多边形的面积可由任意一点与多边形上依次两点连线构成的三角形矢量面积求和得出。

           矢量面积=三角形两边矢量的叉乘。

           如下图:

     

    按定理,多边形面积由P点与A-G的各顶点连接所构成的三角形矢量面积构成,假定多边形顶点坐标顺序为A-G,逆时针为正方向,则有如下结论:

    PAB,PBC,PCD均为顺时针,面积为负;

    PDE,PEF,PFG,PGA均未逆时针,面积为正;

    但无论正负,均可通过P点与顶点连线的矢量叉乘完成,叉乘结果中已包含面积的正负。

     

    2-程序设计

    采用C++的vector(动态数组)存储顶点坐标。

    为方便计算,直接将P点定为原点(0,0),则多边形顶点xy坐标即为向量在xy上分量。

    循环计算多边形顶点坐标每一点与下一点之间的线段,及这两点与P连线的矢量所围成的三角形面积。

    计算面积的函数代码如下:

    复制代码
    iArea=iArea+(vecPoly[iCycle].x*vecPoly[(iCycle+1) % iCount].y-vecPoly[(iCycle+1) % iCount].x*vecPoly[iCycle].y);
    int intAreaCalc(vector<myPoint> &vecPoly)
    {
        int iCycle,iCount,iArea;
        iCycle=0;
        iArea=0;
        iCount=vecPoly.size();
    
        for(iCycle=0;iCycle<iCount;iCycle++)
        {    
            iArea=iArea+(vecPoly[iCycle].x*vecPoly[(iCycle+1) % iCount].y-vecPoly[(iCycle+1) % iCount].x*vecPoly[iCycle].y);
        }
        
        return abs(0.5*iArea);
    }
    复制代码

    注意,要注意的是最后一个顶点,要与第一个顶点练成三角形,可将循环变量对顶点总数求同余,则循环过程中的最后一点+1后,自然会成为第一个顶点,上述代码中的“% iCount”即为解决此问题。

     

    完整程序,请下载工程文件。

     http://files.cnblogs.com/vbspine/sdkPoly.rar

    Ps:上述程序在Win7x64,VS2008环境下编译通过。


    转载:http://www.cnblogs.com/vbspine/archive/2013/03/28/2987818.html


     方法:转自红黑联盟:http://www.2cto.com/kf/201210/162799.html

    题目:输入一个点列,顺次连接成一个封闭多边形,计算多边形的面积

    分析:方法一,计算面积可以考虑定积分的形式,定积分有正有负,顺次求和,重复部分相互抵消,最后剩下的总面积的绝对值就是多边形的面积。

    从线性积分后的结果可以容易的看出,直线段的积分实际上就是求该直线段与x轴所围成的区域的梯形的面积Int(P1, P2) = Int(k*x + b, P1.x, P2.x) = 0.5 * (P2.x - P1.x) * (P2.y + P1.y), 斜率k = (P1.y - P2.y) / (P1.x - P2.x),截距b = P1.y - k*P1.x

    算法的复杂度为:O(N)N为顶点的个数。

    [cpp code]
    struct Point {
    float x, y;
    };
    float LinearIntegration(const Point &p1, const Point &p2) {
    return 0.5 * (p2.x - p1.x) * (p2.y + p1.y);
    }
    float ComputePolygonArea(const Point points[], int N) {
    if (points == NULL || N <= 0) return 0.0;
    float area = 0.0;
    for (int i = 0; i < N - 1; ++ i) {
    area += LinearIntegration(points[i], points[i + 1]);
    }
    area += LinearIntegration(points[N - 1], points[0]);
    return area >= 0.0 ? area : -area;
    }


    方法二,考虑到平面上知道三角形三个顶点的坐标可以运用行列式det直接求解三角形的面积。如P1(x1,y1)P2(x2,y2)P3(x3,y3),则

    S(P1, P2, P3) = det[ x1 y1 1; x2 y2 1; x3 y3 1] * 0.5 = [(x2 - x1) * (y3 - y1) - (x3 - x1) * (y2 - y1)] * 0.5;

    可以在多边形的平面中任意的找到一个点,与多边形的每条边形成有向三角形,并顺次求取有向三角形的面积,再加和,因为是有向面积同上述定积分类似,面积有正有负可抵消重复部分,剩下的面积的绝对值即为多边形的面积。

    [cpp code]
    struct Point {
    float x, y;
    Point() {x = 0.0; y = 0.0;}
    Point(float _x, float _y) {x = _x; y = _y;}
    };
    float ComputeTriangleArea(const Point &p1, const Point &p2, const Point &p3) {
    return 0.5 * ((p2.x - p1.x) * (p3.y - p1.y) - (p3.x - p1.x) * (p2.y - p1.y));
    }
    float ComputePolygonAreaTri(const Point points[], int N) {
    if (points == NULL || N <= 0) return 0.0;
    Point p0(0.0, 0.0);
    float area = 0.0;
    for (int i = 0; i < N - 1; ++ i) {
    area += ComputeTriangleArea(p0, points[i], points[i + 1]);
    }
    area += ComputeTriangleArea(p0, points[N - 1], points[0]);
    return area >= 0.0 ? area : -area;
    }

     

    实例:

    [cpp test code]

    #include

    using namespace std;

     

    struct Point

     

        float x, y;  

    };  

    float LinearIntegration(const Point &p1, const Point &p2)

     

        return 0.5 * (p2.x - p1.x) * (p2.y + p1.y);  

     

    float ComputePolygonArea(const Point points[], int length)

     

        if (points == NULL || length <= 0) return 0.0;  

        float area = 0.0;  

        for (int i = 0; i < length - 1; ++ i)

        {  

            area += LinearIntegration(points[i], points[i + 1]);  

        }  

        area += LinearIntegration(points[length - 1], points[0]);  

        return area >= 0.0 ? area : -area;  

     

     

    int main()

    {

        int n;

        while(cin>>n && n!=0)

        {

           Point a[n];

           for(int i=0; i

               cin>>a[i].x>>a[i].y;

           float ans = ComputePolygonArea(a,n);

           cout<<ans<<endl;

        }

        return 0;

     

    }

    题目:http://acm.whu.edu.cn/learn/problem/detail?problem_id=1402

    Description

    Mr. Tenant is going to buy a new house. In fact, he is going to buy a piece of land and build his new house on it. In order to decide which piece of land to buy, Mr. Tenant needs a program which will give a score to each piece. Each candidate piece of land is a polygonal shape (not necessarily convex), and Mr. Tenant wonders what the best score is. Among possible scores, he considered the number of vertices, sum of angles, minimum number of required guards, and so forth. Finally, Mr. Tenant decided that the best score for a piece of land would simply be its area. Your task is to write the desired scoring program.

    Input
    The input file consists of multiple pieces of land. Each piece is a simple polygon (that is, a polygon which does not intersect itself). A polygon description starts with a positive integer number k, followed by k vertices, where each vertex consists of two coordinates (floating-point numbers): x and y. Naturally, the last vertex is connected by an edge to the first vertex. Note that each polygon can be ordered either clockwise or counterclockwise. The input ends with a "0" (the number zero).
    Output
    For each piece of land, the output should consist of exactly one line containing the score of that piece, rounded to the nearest integer number. (Halves should be rounded up, but Mr. Tenant never faced such cases.) Hint: The scoring program has to handle well degenerate cases, such as, polygons with only one or two vertices.
    Sample Input
    1 123.45 67.890
    3 0.001 0 1.999 0 0 2
    5 10 10 10 12 11 11 12 12 12.0 10.0
    0
    Sample Output

     

    0
    2
    3

    转载:http://blog.sina.com.cn/s/blog_a2ae2da90101ofk7.html

    展开全文
  • 发现一个很有意思且有用的多边形面积计算方式 - 鞋带公式.鞋带公式的表达式为:可以理解为,是把每个顶点向x轴做垂线,每个边和坐标轴构成的梯形面积矢量和,结果就是多边形面积.也可理解为用最大矩形的面积减去各个...

    发现一个很有意思且有用的多边形面积计算方式 - 鞋带公式.

    b1f95fc8a46e6d66.jpg

    鞋带公式的表达式为:

    c01cda093e07474e.png

    可以理解为,是把每个顶点向x轴做垂线,每个边和坐标轴构成的梯形面积矢量和,结果就是多边形面积.

    也可理解为用最大矩形的面积减去各个三角形面积得到中间的多边形面积.

    1. 鞋带公式实现def polygon_area(x,y):

    return 0.5*np.abs(np.dot(x,np.roll(y,1))-np.dot(y,np.roll(x,1)))

    2. 示例1 - 计算曲线与坐标轴的面积import numpy as np

    import matplotlib.pyplot as plt

    from numpy import trapz

    x = np.arange(0,1,0.001)

    y = np.sqrt(1-x**2)

    #

    plt.plot(x, y)

    plt.show()

    #

    area_value = polygon_area(np.append(x, 0), np.append(y, 0))

    3. 示例2 - detectron2 mask 面积def area(self):

    """

    Computes area of the mask.

    Only works with Polygons, using the shoelace formula

    Returns:

    Tensor: a vector, area for each instance

    """

    area = []

    for polygons_per_instance in self.polygons:

    area_per_instance = 0

    for p in polygons_per_instance:

    area_per_instance += polygon_area(p[0::2], p[1::2])

    area.append(area_per_instance)

    return torch.tensor(area)

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

    设Ω是m边形(如下图),顶点任意多边形面积计算公式 - qhn999 - 码代码的猿猿沿边界正向排列,,坐标依次为

    任意多边形面积计算公式 - qhn999 - 码代码的猿猿

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

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

    任意多边形的面积公式

    任意多边形面积计算公式 - qhn999 - 码代码的猿猿

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


    任意多边形面积计算公式 - qhn999 - 码代码的猿猿
     

    转载于:https://www.cnblogs.com/CKboss/p/3350962.html

    展开全文
  • 任意多边形面积计算

    万次阅读 2015-10-08 15:37:29
     书中给出定理:任意多边形的面积可由任意一点与多边形上依次两点连线构成的三角形矢量面积求和得出。  矢量面积=三角形两边矢量的叉乘。  如下图:   按定理,多边形面积由P点与A-G的各顶点...

    1-原理介绍

           原理论述1:

           书中给出定理:任意多边形的面积可由任意一点与多边形上依次两点连线构成的三角形矢量面积求和得出。

           矢量面积=三角形两边矢量的叉乘。

           如下图:

     

    按定理,多边形面积由P点与A-G的各顶点连接所构成的三角形矢量面积构成,假定多边形顶点坐标顺序为A-G,逆时针为正方向,则有如下结论:

    PAB,PBC,PCD均为顺时针,面积为负;

    PDE,PEF,PFG,PGA均未逆时针,面积为正;

    但无论正负,均可通过P点与顶点连线的矢量叉乘完成,叉乘结果中已包含面积的正负。

            原理论述2:

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


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

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

    任意多边形的面积公式


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


    2-程序设计

    采用C++的vector(动态数组)存储顶点坐标。

    为方便计算,直接将P点定为原点(0,0),则多边形顶点xy坐标即为向量在xy上分量。

    循环计算多边形顶点坐标每一点与下一点之间的线段,及这两点与P连线的矢量所围成的三角形面积。

    计算面积的函数代码如下:

    C++的实现

    复制代码
    iArea=iArea+(vecPoly[iCycle].x*vecPoly[(iCycle+1) % iCount].y-vecPoly[(iCycle+1) % iCount].x*vecPoly[iCycle].y);
    int intAreaCalc(vector<myPoint> &vecPoly)
    {
        int iCycle,iCount,iArea;
        iCycle=0;
        iArea=0;
        iCount=vecPoly.size();
    
        for(iCycle=0;iCycle<iCount;iCycle++)
        {    
            iArea=iArea+(vecPoly[iCycle].x*vecPoly[(iCycle+1) % iCount].y-vecPoly[(iCycle+1) % iCount].x*vecPoly[iCycle].y);
        }
        
        return abs(0.5*iArea);
    }
    复制代码

    注意,要注意的是最后一个顶点,要与第一个顶点练成三角形,可将循环变量对顶点总数求同余,则循环过程中的最后一点+1后,自然会成为第一个顶点,上述代码中的“% iCount”即为解决此问题。

    C#的实现

          #region CalculateArea Function
            /// <summary>
            /// 计算多边形面积的函数
            /// (以原点为基准点,分割为多个三角形)
            /// 定理:任意多边形的面积可由任意一点与多边形上依次两点连线构成的三角形矢量面积求和得出。矢量面积=三角形两边矢量的叉乘。
            /// </summary>
            /// <param name="vectorPoints"></param>
            /// <returns></returns>
            public static float CalculateArea(List<PointF> vectorPoints)
            {
                int iCycle, iCount;
                iCycle = 0;
                float iArea = 0;
                iCount = vectorPoints.Count;
    
                for (iCycle = 0; iCycle < iCount; iCycle++)
                {
                    iArea = iArea + (vectorPoints[iCycle].X * vectorPoints[(iCycle + 1) % iCount].Y - vectorPoints[(iCycle + 1) % iCount].X * vectorPoints[iCycle].Y);
                }
    
                return (float)Math.Abs(0.5 * iArea);
            }
            #endregion
    参考文章
    http://www.cnblogs.com/vbspine/archive/2013/03/28/2987818.html

    http://blog.csdn.net/hemmingway/article/details/7814494

    展开全文
  • 任意多边形的面积计算

    万次阅读 多人点赞 2016-04-12 09:56:48
    任意给出一个三角形ΔABC,设其顶点坐标分别为A(x1, y1),B(x2, y2),C(x3, y3),那么根据线性代数的知识,ΔABC的有向面积可表示为: 其中,ΔABC顶点A、B、C逆时针给出时有向面积为正,顺时针给出时有向...
  • 对于任意一个多边形,如果已知其各个顶点的坐标 ,那么这个多边形的面积为: ,其中 。举个例子(From Wikipedia),比如下图这样一个奇奇怪怪的五边形,其顶点坐标为 根据上述公式,只需要把各点坐标带入上述公式即得...
  • 输入任意三个实数,判断他们能不能组成三角形,若能,输出是什么样的三角形(包括,等腰,等边,等边钝角,锐角直角)。
  • 任意三角形面积

    2011-11-07 22:03:30
    设计一个三角形类Triangle。包含三角形三条边长的私有数据成员,另有一个重载运算符”+”,使之能计算任意多个三角形面积之和。
  • 多边形面积求解的方法很多,其中比较多见的就是增加一个点P,然后分别连接多边形各个定点与P点,然后计算每个三角形的符号面积面积有正负之分),求和就可以计算面积。鉴于上面的方法,我们也可以用另外一种更...
  • 利用python计算任意多边形面积

    千次阅读 2019-05-24 18:10:08
    将n边形分割为n-2个三角形,利用向量叉乘法计算三角形面积分别计算每个三角形面积后累加得多边形面积。 第一次写博客,见笑了。 python代码. import math import re VERTICES_FILE = "vertices4.txt" class Point: ...
  • 【问题】已知一个三角形三条边的边长分别为a,b,c,利用海伦—秦九韶公式设计一个计算三角形面积的算法。(已知三角形三边边长分别为a b c,则三角形面积为S= ),其中p= .这个公式被称为海伦—秦九韶公式)...
  • 有关多边形面积计算的详细理论这里不做介绍,仅给出代码模板,并以HDU-2036作为样例 https://vjudge.net/problem/HDU-2036 //写在前面 //求任意多边形的面积可以将多边形划分为n个三角形 //然后利用叉积公式求每...
  • Python计算任意多边形面积算法

    万次阅读 2013-02-20 17:22:07
    多边形面积求解的方法很多,其中比较多见的就是增加一个点P,然后分别连接多边形各个定点与P点,然后计算每个三角形的符号面积面积有正负之分),求和就可以计算面积。  鉴于上面的方法,我们也可以用...
  • 计算三角形面积

    2018-08-17 10:53:10
    三边计算三角形面积,用Java写的一个小程序。。。。。。
  • matlab计算任意多边形面积

    万次阅读 2017-11-08 09:38:53
    两向量叉乘为这俩向量组成的三角形面积的两倍,所以多边形面积公式为: S = 0.5 * (OA 叉乘 OB +OB 叉乘 OC +…O** 叉乘 OA) matlab代码实现:第一步:取得坐标点数据,读取excel 第二步:计算向量叉乘 第三步...
  • 【几何】计算任意多边形面积

    千次阅读 2019-09-05 13:58:53
      任意一个点与其他线段组成的三角形面积之和   分为凸多边形和凹多边形分别证明: 一、凸多边形   如下所示的凸多边形,显然是对的,因为所有三角形拼起来就是整个多边形。   Stotal=S△ABC+S△ACD+S△...
  • 墨卡托法,计算任意多边形曲面的面积。可以用于各种地图控件。
  • 20190812期Labview实现三角形面积计算与有效性判断 我们都知道a,b,c三条边满足有效三角形需要都大于零,而且任意两条边之和大于第三条边: a>0,b>0,c>0 a+b>c a+c>b b+c>a 这四个条件都要满足。...
  • Python | 任意多边形间的重叠面积计算

    千次阅读 热门讨论 2019-10-19 23:49:03
    他说,算法搜索速度很慢,每两个物体间的重叠面积计算时间若按1s来算,300个物体需要计算将近9万次。 我说,这用计算机视觉难道不是几句话解决的嘛! (小小的嘚瑟一把,虽然做了这么久的CV,一直觉得自己一无所成,...
  • 计算任意多边形的面积 对于凸多边形,很容易计算,如下图,以多边形的某一点为顶点,将其划分成几个三角形计算这些三角形面积,然后加起来即可。已知三角形顶点坐标,三角形面积可以利用向量的叉乘来计算。 ...
  • 计算任意多边形算法。。希望可以帮助到你。 。
  • 用户输入三个边长,检验其是否能构成一个三角形(检查是否任意两边和均大于第三边),如果构成三角形计算面积并输出;如果不构成三角形,输出信息“Error Data!”。程序能连续接收两组数据,给出两组结果。 程序...
  • 计算任意多边形面积

    千次阅读 2018-10-12 21:40:08
    这块田位于浙江省温州市苍南县灵溪镇林家铺子村,多边形形状的一块地,原本是linle 的,现在就准备送给你了。不过,任何事情都没有那么简单,你必须首先告诉我这块地到底有多少面积,如果回答正确才能真正得到这块地...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 14,876
精华内容 5,950
关键字:

任意三角形面积计算