高手帮忙计算下面积 

解决方案 »

  1.   

    下面是我用的,对凸多边形和凹多边形都适合。#include "stdafx.h"
    #include   <afx.h>
    typedef struct tagPoint
    {
    double x;
    double y;
    }FPoint;
    double CalArea(double x[], double y[], long pointNum)
    {
    if(pointNum<3)return 0;

    double sum = 0;
    int m = 1;
    for(;;)
    {
    if(pointNum < 3)break;
    FPoint r1;
    r1.x = x[m] - x[0];
    r1.y = y[m] - y[0];
    FPoint r2;
    r2.x = x[m+1] - x[m];
    r2.y = y[m+1] - y[m];
    sum += (r1.x * r2.y - r2.x * r1.y);
    m++;
    pointNum --;
    }
    double result = (sum>0)?(sum/2.):(-sum/2.);
    return result;
    }
      

  2.   

    做一个黑笔 CPen(PS_SOLID, 1, (COLORREF)0X00000000);
    做一个黑刷 CBrush((COLORREF)0X00000000);
    把多边形的各个角点存到数组 POINT Points[];
    调用折线绘图 BOOL Polygon( LPPOINT lpPoints, int nCount );
    数一下DC中黑点的个数 GetPixel(x,y);
    --------------------------------------------------------
    个数 = 面积。
    这是个很经典的做法。
      

  3.   

    发表于:2009-07-08 10:01:4110楼 得分:0 
    下面是我用的,对凸多边形和凹多边形都适合。 
     
    你是把多边形以x0  y0
    分为n-2个三角对吧   那样 算不了像  边是不规则锯齿状的多边形呀
      

  4.   

    以四个顶点为例 (x1,y1)(x2,y2)(x3,y3)(x4,y4)面积 S = 0.5 * { (x1+x2)(y2-y1) + (x2+x3)(y3-y2) - (x3+x4)(y3-y4) - (x4+x1)(y4-y1) }整理后为 S = 0.5 * { (x1*y2 - x2*y1) + (x2*y3 - x3*y2) + (x3*y4 - x4*y3) + (x4*y1 - x1*y4) }
      

  5.   

    嗯。。是的。。但是用整理后的公式就不用判断了。。
    std::vector<CPoint> m_vPoint;  // 存放各顶点坐标
    double CalArea(CPoint Pt1,CPoint Pt2){ return Pt1.x*Pt2.y-Pt2.x*Pt1.y; }double dArea = 0;
    int iNum = (int)m_vPoint.size();for( int i = 0; i < iNum-1; i++ )
    {
    dArea += 0.5*CalArea(m_vPoint[i], m_vPoint[i+1]);
    }dArea += 0.5 * CalArea(m_vPoint[iNum-1], m_vPoint[0]);
    dArea = abs(dArea);
      

  6.   


    呵呵  比较笨  Pt1.x*Pt2.y-Pt2.x*Pt1.y  看不懂   怎么象在做行列式
      

  7.   

    用的CPoint类型,Pt1.x*Pt2.y-Pt2.x*Pt1.y其实就相当于 x1*y2 - x2*y1等等。。
      

  8.   

    恩   我看懂了   你那是有行列式算(x1,y1)(x2,y2)两个向量为边的四边形   是吧