精华内容
下载资源
问答
  • 多边形面积

    2017-12-09 15:33:00
    多边形面积 多边形通常分为凸多边形和凹多边形 计算多边形面积有几种好用的算法 其核心思想都是把一个n(n>=3)边形转化为n-2个三角形,然后计算 一:海伦公式 最常见的多边形面积计算公式 此...

     

    多边形面积

    多边形通常分为凸多边形凹多边形

    计算多边形面积有几种好用的算法

    其核心思想都是把一个n(n>=3)边形转化为n-2个三角形,然后计算

    一:海伦公式

    最常见的多边形面积计算公式

     

    此公式表达式为:

    S= sqrt( p*(p-a)*(p-b)*(p-c))

    其中p为此三角形的半周长,而a,b,c为三角形三边长

    若三角形三点为x1,y1,x2,y2,x3,y3,

    即p=(a+b+c)/2

    a=sqrt((x2-x1)2+(y2-y1)2)

    b=sqrt((x3-x2)2+(y3-y2)2)

    c=sqrt((x3-x1)2+(y3-y1)2)

     

    可能海伦公式就是S=\frac{1}{2}ab\sin \gamma 的一个变形而已。。。所以觉得意义也是等价的。。。

    S = \frac{1}{2} a b \sin\gamma \\     a^2+b^2-2ab\cos\gamma = c^2 \\     \cos\gamma = \frac{a^2+b^2-c^2}{2ab}     S = \frac{1}{2} a b \sqrt{1-(\frac{a^2+b^2-c^2}{2ab})^2} \\     = \frac{1}{2}\sqrt{\frac{4a^2b^2-(a^2+b^2-c^2)^2}{4}} \\     = \frac{1}{4}\sqrt{(2ab-(a^2+b^2-c^2))(2ab+(a^2+b^2-c^2)} \\     = \frac{1}{4}\sqrt{(c^2-(a-b)^2)((a+b)^2-c^2)} \\     = \frac{1}{4}\sqrt{(c-a+b)(c+a-b)(a+b-c)(a+b+c)} \\     if \ \ a+b+c = 2\rho \\     = \frac{1}{4}\sqrt{(2\rho-2a)(2\rho-2b)(2\rho-2c)2\rho} \\     = \sqrt{(\rho-a)(\rho-b)(\rho-c)\rho} \\

    然后,我们再来进一步思考,这个东西和内心的关系:

    对三角形的内切圆来说,如前面 白如冰所说会很自然联想到内切圆:

    S = \frac{1}{2}(2r\alpha+2r\beta+2r\gamma); \\     \rho = \alpha + \beta + \gamma; \\     S = \frac{1}{2}r(a+b+c) = r\rho \\     r^2\rho^2 = (\rho-a)(\rho-b)(\rho-c)\rho \\     r^2\rho = (\rho-a)(\rho-b)(\rho-c) \\     r = \sqrt{\frac{(\rho-a)(\rho-b)(\rho-c)}{\rho}}  \\


    如此,我们发现,内切圆的半径实际上可以被 半周长 和 a,b,c表示了。
    缺点:适用于边数很小的情况,一旦边数增多,计算繁琐,损失精度

    C++代码:

     1 typedef struct
     2 {
     3     int x;
     4     int y;
     5 }Point;
     6 Point point[N];
     7 int Area(point[a],point[b],point[c])
     8 {
     9     double area;
    10     double la,lb,lc;
    11     la=sqrt((point[b].x-point[a].x)*(point[b].y-point[a].y));
    12     lb=sqrt((point[c].x-point[b].x)*(point[c].y-point[b].y));
    13     lb=sqrt((point[c].x-point[a].x)*(point[c].y-point[a].y));
    14     p=(la+lb+lc)/2;
    15     area=sqrt(p*(p-la)*(p-lb)*(p-lc));
    16     return area;
    17 }

     

    二:向量计算法

    此方法可查看此资料:

    https://files.cnblogs.com/files/tenjl-exv/%E5%A4%9A%E8%BE%B9%E5%BD%A2%E9%9D%A2%E7%A7%AF.ppt

    有关资料证明:

    我们都知道已知A(x1,y1)、B(x2,y2)、C(x3,y3)三点的面积公式为

                       |x1 x2 x3|
    S(A,B,C) =  |y1 y2 y3| * 0.5 = [(x1-x3)*(y2-y3) - (x2-x3)*(y1-y3)] /2
                       |1    1  1 |

    (当三点为逆时针时为正,顺时针则为负的)

    对于多边形A1A2A3、、、An(顺或逆时针都可以)

    设平面上有任意的一点P,则有:

    S(A1,A2,A3,、、、,An) = abs(S(P,A1,A2) + S(P,A2,A3)+、、、+S(P,An,A1))

    P可以任意取点

    如果P取多边形外一点,且取(0,0)时

    设点顺序 (x1 y1) (x2 y2) ... (xn yn),则面积等于

                 |x1 y1|    |x2 y2|              |xn yn|
    S= abs( |        | + |        | + ...... + |         | ) /2
                 |x2 y2|    |x3 y3|              |x1 y1|
     
    其中

    |x1 y1| 
    |         | ===  x1*y2 - y1*x2
    |x2 y2| 

     

    因此面积公式展开为:

                 |x1 y1|     |x2 y2|              |xn yn|

    S=abs(  |        | +  |        | + ...... +  |        | )  = abs(x1*y2-y1*x2+x2*y3-y2*x3+...+xn*y1-yn*x1) /2
                 |x2 y2|     |x3 y3|              |x1 y1|

    C++代码如下:

    int x[100];
    int y[100];
    
    double Area(int *x,int *y,int n)
    {
        double s=0;
        for(int i=0;i<n;i++)
        {
        int j=(i+1)%n;
            s+=x[i]*y[j];
            s-=x[j]*y[i];
        }
        s/=2;
        return (s>0?s:-s);
    }
    
      //  area=Area(x,y,n);
      //  n为点的个数

     

    转载于:https://www.cnblogs.com/tenjl-exv/p/8011513.html

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

    2017-12-04 15:45:59
    计算多边形面积计算多边形面积计算多边形面积计算多边形面积计算多边形面积
  • 该函数计算考虑相对缠绕的多边形面积。 面积通过分段积分计算,在切片上求和,边界由所有顶点和交点定义。 此方法计算与 MATLAB 'inpolygon' 函数一致的复杂形状的面积。
  • 多边形面积计算器

    2015-09-05 14:37:58
    多边形面积计算器,由坐标计算面积。有图形,很直观
  • 多边形面积修改工具

    2018-04-18 16:00:33
    可以自由修改cad中的多边形面积,调整面积大小,可以单独调整任何一边。
  • 多边形面积的计算

    万次阅读 2017-12-21 18:02:01
    多边形面积的计算一般是将其剖分为三角形,利用海伦公式计算每个三角形的面积,然后将所有三角形的面积加起来。但是,这种方法程序实现起来比较复杂,因为无法预知多边形的形状,需要判断多边形的“凸凹”,才能避免...

    前言

    多边形面积的计算一般是将其剖分为三角形,利用海伦公式计算每个三角形的面积,然后将所有三角形的面积加起来。但是,这种方法程序实现起来比较复杂,因为无法预知多边形的形状,需要判断多边形的“凸凹”,才能避免重复计算。另外,计算边长的计算量也比较大。本文采用“鞋带公式” (Shoelace formula) 计算
    ,不管坐标原点怎样选取,只要顺序输入多边形每个顶点的坐标,按同样的顺序(顺时针或反时针)两两叉乘。这些叉乘的和的绝对值的一半就是该多边形面积。这个方法编程简单,计算量也比较小,优势明显。

    计算公式

    设O为原点,多边形由点P0,P1,...,Pn−1P_0, P_1, ..., P_{n-1}P0,P1,...,Pn1连线围成,则面积S为:
    S=12∣∑i=0n−1(OPi‾×OPi+1‾)∣,(Pn=P0)S=\frac{1}{2}|\sum_{i=0}^{n-1}({\overline{OP_i}\times\overline{OP_{i+1}}})|, (P_n=P_0)S=21i=0n1(OPi×OPi+1),(Pn=P0)
    举一个最简单的例子,n=3。也就是三角形的面积。
    S=12∣OP0‾×OP1‾+OP1‾×OP2‾+OP2‾×OP0‾∣S=\frac{1}{2}| \overline{OP_0}\times \overline{OP_1}+\overline{OP_1}\times \overline{OP_2}+\overline{OP_2}\times \overline{OP_0}| S=21OP0×OP1+OP1×OP2+OP2×OP0

    如图,三角形P0P1P2P_0P_1P_2P0P1P2的面积(即粉红色部分)等于三角形OP1P2OP_1P_2OP1P2减去三角形OP0P1OP_0P_1OP0P1和三角形OP2P1OP_2P_1OP2P1而得。粗粗看上去好像问题搞复杂了,其实不然,因为三角形OP1P2OP_1P_2OP1P2OP0P1OP_0P_1OP0P1OP2P1OP_2P_1OP2P1的面积(带符号)都通过叉乘而得,编程非常简单。这几个带符号面积相加,自动消除了重复计算的部分。可以说非常巧妙。当推广到一般n的时候,这种算法的优势就很明显了。

    程序说明

    本文用C++实现多边形面积计算。由于程序比较小,所有定义都放在一个文件中。程序中将多边形定义为一个类:Polygon。顶点存储在一个属性ps(数组)中。定义了顶点数据的输入输出函数。为了简便起见,不考虑顶点数据的修改或删除。属性函数getArea()运用以上公式计算多边形面积。

    程序源文件

    #include<iostream>
    #include<vector>
    #include<stdio.h>
    using namespace std;
    
    struct Point
    {
        double x, y;
    };
    
    double operator*(const Point &p1,const Point &p2) { return (p1.x*p2.y-p1.y*p2.x); }
    
    class Polygon
    {
    private:
        vector<Point> ps;
    protected:
    
    public:
        double getArea();
        void pushPoint(double _x, double _y);
        void printPoints();
    };
    
    double Polygon::getArea()
    {
        double area=0.0;
    
        for(size_t i=0;i!=ps.size();++i)
        {
            area+=ps[i] * ps[(i + 1) % ps.size()];
        }
    
        return 0.5 * (area >=0 ? area : -area);
    }
    
    void Polygon::pushPoint(double _x, double _y)
    {
        Point pt;
        pt.x=_x;
        pt.y=_y;
    
        ps.push_back(pt);
    }
    
    void Polygon::printPoints()
    {
        for (size_t i=0;i!=ps.size();++i) {
            cout<<"P["<<i<<"]"<<"=("<<ps[i].x<<","<<ps[i].y<<")"<<endl;
        }
    }
    
    void inputData(Polygon &plygn) //input data from console
    {
        double vx,vy;
        size_t i=0;
    
        cout<<"\nInput points coordinates, separated by space key. ^Z to end."<<endl;
        cout<<"P["<<i<<"]=";
        while (cin>>vx>>vy) {
               plygn.pushPoint(vx,vy);
               cout<<"P["<<++i<<"]=";
        }
        return;
    }
    
    int readData(string &dataFileName, Polygon &plygn)  //read data from file
    {
       int itemsRead=0;
       FILE *sf;
       double vx,vy;
    
       if (sf=fopen(dataFileName.c_str(),"r")) {
            cout<<"Read data from "+dataFileName+" ... ... ";
            while (!feof(sf)) {
                fscanf(sf,"%lf %lf",&vx,&vy);
                plygn.pushPoint(vx,vy);
                itemsRead++;
            }
            cout<<itemsRead<<" points read."<<endl;
            fclose(sf);
            sf=NULL;
       }
       else itemsRead=-1;
    
       return itemsRead;
    
    }
    
    // main
    int main()
    {
    
        Polygon pn;
        string sn="data.txt";
    
        if (readData(sn,pn)!=-1) {
            pn.printPoints();
            cout<<"Area="<<pn.getArea()<<endl;
        }
        else cout<<"404 File not found."<<endl;
    
        return 0;
    }
    
    

    实验数据文件:data.txt

    3 4
    5 11
    12 8
    9 5
    5 6
    6 5
    5 9
    8 12
    11 5
    4 3
    
    

    参考文献

    计算公式参考:
    https://en.wikipedia.org/wiki/Shoelace_formula

    展开全文
  • 该demo实现了将坐标系中无序的坐标点排列位有序的坐标点,并按照排序后的坐标点组成多边形,并计算该多边形面积。其中也包含坐标系中点在坐标中象限的划分和qt的路径绘图,通过QPainterPath和QPainter绘制图形和QMap...
  • VB 计算多边形面积

    2010-06-07 14:52:58
    VB 计算多边形面积 VB 计算多边形面积 VB 计算多边形面积
  • 多边形面积计算

    2013-03-24 11:46:06
    计算不规则多边形面积的小工具,并绘制出简图,希望能给你的计算带来一些便利。
  • 多边形面积

    2018-04-13 11:42:56
    在计算几何中经常遇到要求多边形面积的题目,这里总结一些模板。 对于多边形ABCDE的面积,我们可以看做2个多边形面积的差,即,Sabcde=Soab+Soae+Soed-Socd-Socb. 根据二维向量的叉乘我们可以求出三角形oab的...

    在计算几何中经常遇到要求多边形面积的题目,这里总结一些模板。
    这里写图片描述
    对于多边形ABCDE的面积,我们可以看做2个多边形面积的差,即,Sabcde=Soab+Soae+Soed-Socd-Socb.
    根据二维向量的叉乘我们可以求出三角形oab的面积
    即Soab=0.5*|oa叉乘ob|=0.5*|A.x*B.y-A.y*B.x|.
    同理。
    Sabcde=Soab+Soae+Soed-Socd-Socb
    =0.5*|B.x*A.y-B.y*A.x|+0.5*|A.x*E.y-A.y*E.x|+0.5*|E.x*D.y-E.y*D.x|-0.5*|D.x*C.y-D.y*C.x|-0.5*|C.x*B.y-C.y*B.x|.
    叉乘时带着的有绝对值,当我们去掉绝对值时会发现三角形ocb和odc的面积是负的。那是因为给出坐标时都是以顺时针顺序给的,像OAE,OED,都是顺时针,而ODC却是逆时针。
    因此,公式就可以化简了。
    Sabcde=Soab+Soae+Soed-Socd-Socb
    =0.5*(B.x*A.y-B.y*A.x+A.x*E.y-A.y*E.xE.x*D.y-E.y*D.x+D.x*C.y-D.y*C.x+C.x*B.y-C.y*B.x)。
    下面是代码(输入时先输入顶点个数,再按顺指针方向输入各顶点坐标)。

    /*给出顶点坐标(顺时针输入),求多边形面积*/
    #include<stdio.h>
    typedef struct{
        double x,y;
    }qq;
    const int maxn=1e3+7;
    
    double SSS(qq *p,int n)
    {
        int s=0;
        for(int i=0;i<n;i++)
        {
            s+=(p[i].x*p[(i+1)%n].y-p[(i+1)%n].x*p[i].y);
        }
        return s/2;
    }
    int sq(qq *p,int n,int A)
    {
    
    }
    int main()
    {
        qq q[maxn],A;
        int n;
        while(scanf("%d",&n)!=EOF)
        {
    //      scanf("%d%d",&A.x,&A.y);
            for(int i=0;i<n;i++)
            {
                scanf("%lf%lf",&q[i].x,&q[i].y);
            }
            double sz=SSS(q,n);
    //      int sd=sq(q,n,A);
            printf("%lf\n",sz);
        }
        return 0;
    }
    /*
    3
    0 0
    0 2
    2 0
    -2.000000
    3
    0 0
    2 0
    0 2
    2.000000
    */
    展开全文
  • C#不规则多边形面积周长计算
  • 多边形面积求和

    2019-01-18 11:57:41
    ACM中计算几何是常考的一个题型,这里总结一下比较常见的多边形面积求和问题: 三角形的面积公式: S=0.5*AB*AC 这里以原点(0,0)为三角形的一个顶点。 向量叉乘:a*b=x1y2-x2y1 S= (x1y2-x2y1)/2 多边形就是...

    ACM中计算几何是常考的一个题型,这里总结一下比较常见的多边形面积求和问题:

    三角形的面积公式:
    S=0.5*AB*AC

    这里以原点(0,0)为三角形的一个顶点。
    向量叉乘:a*b=x1y2-x2y1
    S= (x1y2-x2y1)/2

    多边形就是多个三角形相加,因为是向量叉乘,因此自身带有正负号,因此同样适用于凹多边形(减去了多出来的部分)。

    因此,多边形的面积计算方法就是SumEare+=S;

    下面道例题来说一下:

    牛客练习赛36,多边性面积+前缀和(否则超时)

    https://ac.nowcoder.com/acm/contest/328/F

    AC:

    const int MAXN=1e5+10;
    const int INF32=0x3f3f3f3f;
    const ll INF64=0x3f3f3f3f3f3f3f3f;
    const ll mod=1e9+7;
    const double PI=acos(-1.0);
     
    //三角形的面积公式:
    //S=0.5*AB*AC
    //向量叉乘:a*b=x1y2-x2y1
    //S= (x1y2-x2y1)/2
    double x[MAXN],y[MAXN],Seare[MAXN];
    double x_,y_;//这里是选取的一个点作为参数。
    double getS(int i,int j)
    {
        return ((x[i]-x_)*(y[j]-y_)-(x[j]-x_)*(y[i]-y_))/2.0;
    }
     
    int main()
    {
        int n,q;
        cin>>n>>q;
        for(int i=1;i<=n;++i)
            cin>>x[i]>>y[i];
        x_=x[1];y_=y[1];
        for(int i=1;i<n;++i)
            Seare[i]=Seare[i-1]+getS(i,i+1);
        double sum=Seare[n-1];
        double ans=0;
        while(q--)
        {
            int a,b;
            double res=0;
            cin>>a>>b;
            if(a>b)
                swap(a,b);
            if(a+1==b)
                continue;
            res=Seare[b-1]-Seare[a-1];
            res-=getS(a,b);
            ans=max(ans,min(res,sum-res));
            //cout<<res<<" "<<ans<<endl;
        }
        cout<<ans<<endl;
    }

     

    展开全文
  • 多边形面积

    2019-03-28 00:39:46
    求正多边形面积 import java.util.Scanner; //import java.math*; public class MianJi { public static void main(String [] args) { Scanner input=new Scanner(System.in); System.out.println(“请输入多边形的...
  • 使用“鞋带公式”计算多边形面积
  • * 计算多边形面积公式 * * @author Lion Li * @date 2020-05-07 */ public class PolygonArea { public static void main(String[] args) { //多边形面积 double sum = 0; //临时变量 ...
  • 梯形法算多边形面积

    2014-11-19 21:30:52
    梯形法计算多边形面积,pdf格式。在计算机图形学中,多任意多边形面积采用梯形法计算,减少了工作量,提高了效率。
  • C# 代码 计算多边形面积 里面有两个方法 计算方式不同
  • 地理信息算法——计算多边形面积和中点
  • 主要介绍了Python求凸包及多边形面积教程,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 4,102
精华内容 1,640
关键字:

多边形面积