zoukankan      html  css  js  c++  java
  • 转:求多边形的面积 算法几何

         我还是简单解释一下,如果是没有读过高等数学的朋友,也让你大致明白。
      定积分的本质是求和,计算f(x)在积分区间[a,b]上的一个和S,首先把积分区间分成n份,这样的分法记为λ,记Δ(λ)=max{Δx|[xi-1,xi]},也就是所有这些分成的小段中长度最大的一段的长,如果当Δ→0的时候,和式S=∑f(θ)Δx (θ∈[xi-1,xi])的极限如果存在的话,就称其为f(x)[a,b]上的定积分,记为
    b
    ∫f(x)dx
    a
      其意义从几何上解释,就是f(x)的曲线与x轴、直线x=a,x=b围成的图形的面积。
      现在要求的多边形是由线段组成的,只要把所有的线段都求定积分,最后把和加起来,就是多边形的面积。这个推论的证明从略。值得注意的是,用定积分求的面积有正负之分,即:
    ∫f(x)dx=-∫f(x)dx

    a积到b,与从b积到a只相差一个负号。

      线段定积分的计算公式的推导

    给出两个点,如何求这两点连成的线段的定积分值呢?
    直线的方程可以用y=kx+b表示,所以围成的面积
    S=
    x2
    ∫(kx+b)dx
    x1
    =k/2(x2^2-x1^2)+b(x2-x1)

    而斜率k=(y2-y1)/(x2-x1)
    截距b=y1-kx1=y1-x1(y2-y1)/(x2-x1),代入前式得
    S=(y2-y1)(x2+x1)/2+y1(x2-x1)-x1(y2-y1)
    =(x2-x1)(y1+y2)/2
    这让我想到一个初等公式,梯形面积公式,y1,y2看成上下底,(x2-x1)看成是高,上底加下底乘高除二,对直线定积分得到的正是这个梯形的面积。这样走了一个大弯又回到初中了。

      C++程序代码

    #include<iostream.h>

    float linesqr(x1,y1,x2,y2)
    float x1,y1,x2,y2;
    {return (x2-x1)*(y1+y2)/2.0;}

    void main()
    {
    float fx,fy,x1,y1,x2,y2,s=0.0;
    int n,i;
    cout<<"多边形的顶点数";
    do{cin>>n;}
    while(n<3);
    cout<<"第1个点坐标"<<endl;
    cin>>x1>>y1;fx=x1;fy=y1;
    cout<<"第2个点坐标"<<endl;
    cin>>x2>>y2;
    s=linesqr(x1,y1,x2,y2);
    for(i=3;i<=n;++i)
    {
      x1=x2;y1=y2;
      cout<<"第"<<i<<"个点坐标"<<endl;
      cin>>x2>>y2;
      s+=linesqr(x1,y1,x2,y2);
    }
    s+=linesqr(x2,y2,fx,fy);//首尾相连
    cout<<"多边形的面积为"<<s<<endl;
    }

  • 相关阅读:
    C#.NET中现在用的SqlHelper操作方法集合【收藏版】
    SQLHelper.cs的经典代码收集
    ASP.NET数据格式的Format DataFormatString
    asp.net操作 httpcookie
    项目开发中我所用到的SQL收集
    GridView的dataformatstring设置
    jQuery事件处理: 别再乱用“return false”了
    非常不错的空白占位符“    ”
    Hello World
    VSFlexGrid 控件属性方法一览
  • 原文地址:https://www.cnblogs.com/zhangdongdong/p/2853510.html
Copyright © 2011-2022 走看看