现有坐标一堆,首尾相连的坐标文本一个,要计算出这个坐标区域的面积。希望能得到各位的帮助。
能有一个完整的算法就好了。

解决方案 »

  1.   

    坐标格式如下所示:J001,1,3259946.516,38419740.988
    J002,1,3260209.997,38419967.610
    J003,1,3260213.022,38419976.208
    J004,1,3260228.200,38419989.232
    J005,1,3260246.108,38419999.082
    J006,1,3260258.634,38420015.190
    J007,1,3260274.274,38420027.676
    J008,1,3260289.569,38420040.565
    ·······
      

  2.   

    我给楼主一点提示,用动态规划算法,例如,有一个多边形ABCED,其面积
    SABCDE = SABC+SACDE至于一个三角型ABC的面积,矢量AB叉乘矢量BC得到,叉乘的公式可以上网去搜一下,这就将复杂度为n的问题转换为了复杂度为n-1的问题。从这个思路出发,相信楼主应该很容易解决这个问题吧,不过需要考虑的是,我上面这个算法只适用于凸多边形,凹多边形和有交叉的多边形不成立,需要分类讨论,比较复杂。
      

  3.   

    我也不会,但试试这个double area(CPoint loca[n])//数组保存定点坐标
    {
    double a,b,c;
    double result=0;
    double p;//
    for(int i=2;i<n-1;i++)
    {
    a=sqrt((loca[i-1].x-loca[0].x)^2+(loca[i-1].y-loca[0].y)^2);//第一个边长
    b=sqrt((loca[i].x-loca[i-1].x)^2+(loca[i].y-loca[i-1].y)^2);//第二个
    c=sqrt((loca[i].x-loca[0].x)^2+(loca[i].y-loca[0].y)^2);//第三个
    p=(a+b+c)/2;
    result+=sqrt(p*(p-a)(p-b)(p-c));//海伦公式
    }
    return result;
    }
    地址:http://www.programfan.com/club/showpost.asp?id=101283&t=o
      

  4.   

    只要顺时针把所有外凸三角形面积相加,再计算内部剩余的外凸多边形(把其分成各相邻三点为顶点的三角形即可)。
    判断外凸或内凹比较复杂,一种解决方法是先计算从起点经过折线转一圈回来的角度是顺时针还是逆时针,从而知道对于每条边来说,哪一侧构成其围面积的有效侧,如果两相邻边在其围面积的有效侧成角大于180度,则构成这两条边的三个点所围三角形为凹,否则为凸。以上原理配合着向量计算三角形面积(不懂的话google下很方便的),应该不难解决问题。
      

  5.   

    /// <summary>
            /// 多边形面积计算(不论凸凹)
            /// </summary>
            /// <param name="count">坐标点数</param>
            /// <param name="X">坐标的横坐标集合</param>
            /// <param name="Y">坐标的纵坐标集合</param>
            /// <returns></returns>
            private double Area(int count,double [] X,double [] Y) 
            {
                double area;
                if (count < 3) 
                    return 0;
                area= Y[0] * (X[count - 1] - X[1]);
                for (int i = 1; i <count; i++)
                    area+= Y[i] * (X[(i - 1)] - X[(i + 1)%count]);
                return area/2;
            }
    上面用凸凹多边形分别试了,正确!嘎嘎!
      

  6.   

    /// <summary>
            /// 计算多边形面积,应该取绝对值.顺时针时结果为负,反之为正
            /// </summary>
            /// <param name="count">点数</param>
            /// <param name="X">代表横坐标集合</param>
            /// <param name="Y">代表纵坐标集合</param>
            /// <returns>返回多边形面积</returns>
            private double areaDuoBianXing(int count,double[] X, double[] Y)
            {
                double area=0;
                for (int i =0; i <count; i++)
                    area +=Y[i+1]*X[i] - X[i + 1]*Y[i];
                return Math.Abs(area/2);
            }
    这样也是可以得出正确结果的.针对所有类型多边型.
      

  7.   

    计算面积不应该用海伦公式,需要开根号,计算量大,应该用叉乘。
    clxcxx的算法是正确的?看起来不像啊,能不能解释下?