能有例程最好,谢谢!

解决方案 »

  1.   

    想请问postren(小虫) ,一个多边形图形,如何把它分成多个三角形呢??
      

  2.   

    to   tonylk(=www.tonixsoft.com=) 
    你查查几何书吧, 解析几何中有的, 知道每个顶点的坐标当然能划分了, 可以任意划分
      

  3.   

    To : postren(小虫) 別人不知道才會來這問, 你不知道就不要發言,  何必說那么多的廢話. 你還不如回答"寫代碼就可以算出來" 知道就告訴人家,  不知道就不要在這里耍人家!我沒有想到很好的算法 ,  如有一定告知樓主!
      

  4.   

    转帖,自己看看对不对
    const MaxPointNum = 65535;
    type
       PXY = ^TXY;
       TXY = record             // 点的数据结构
          x, y: single;
       end;
       XYArray = array[0..MaxPointNum] of TXY;
       PXYArray = ^XYArray;     //  线/面的数据结构// 积分方法求多边形/面状图形的面积
    // 多边形坐标在 xys 中,点数在 nn 中
    function AreaOfPolygon(xys: PXYArray; nn: integer):single;
    var ii:integer;
        ss: single;
    begin
       ss := 0;
       for ii := 0 to nn-2 do
           ss := ss + (xys^[ii].y+xys^[ii+1].y) * (xys^[ii].x-xys^[ii+1].x) / 2;
       result := abs(ss);
    end;// 判别点(x,y)是否落在多边形内
    // 多边形坐标在 xys 中,点数在 nn 中
    function isPtInRegion(x, y: single; xys: PXYArray; nn: integer): boolean;
    var ii, ncross : integer;
        yt, x0, y0, x1, y1, x2, y2 : single;
    begin
       ncross := 0;
       x0 := x;   y0 := y;
       for ii := 0 to nn-2 do begin
          x1 := xys^[ii].X;     y1 := xys^[ii].Y;
          x2 := xys^[ii+1].X;   y2 := xys^[ii+1].Y;
          if((x0>=x1) and (x0=x2) and (x00) and ((ncross mod 2) = 1)) then Result := True
                                                else Result := FALSE;
    end;
      

  5.   

    to Hewin(hewin) 
    并不是所有的问题都必须要等到别人把代码写出来的, 可能楼主是没有思路, 给他个思路, 让他开阔一下思路, 也不是所有的人都有太多的代码, 也不是每个人都有太多的时间写代码. 什么叫废话? 像你那样JJWW/GGLL的说了半天才算是废话, 没功夫和你斗嘴我的格言: ★真诚每一天◆快乐每一天★
      

  6.   

    这里给您一个十分简洁的伪代码:
    var s:Real; i,N:Integer;
    //假设N是多边形顶点数,(x[0],y[0]),...,(x[N-1],y[N-1])是顶点坐标
    s:=0;
    for i:=0 to N-1 do
     s:=s+x[i]*y[(i+N-1)mod N]-x[(i+N-1)mod N]*y[i];
    得到的s的绝对值就是面积。在学术期刊网上搜索下面论文
    "图像不变矩的轮廓链快速算法" 华中科技大学学报(自然科学版) 2003年01期
    能得到更详细解释。祝您好运!
      

  7.   


    方法1:
    用这个方法吧:
    我们都知道已知A(x1,y1)B(x2,y2)C(x3,y3)三点的面积公式为
               |x1  x2  x3|
    S(A,B,C) =  |y1  y2  y3| * 0.5  (当三点为逆时针时为正,顺时针则为负的)
               |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是可以取任意的一点,用(0,0)就可以了。
    还有一个方法:
    任意一个简单多边形,当它的各个顶点位于网格的结点上时,它的面积数S=b/2+c+1
    其中:b代表该多边形边界上的网络结点数目
          c代表该多边形内的网络结点数目所以把整个图形以象素为单位可以把整个图形分成若干个部分,计算该图形边界上的点b和内部的点c就得到面积数S了,然后把S乘以一个象素的面积就是所求的面积了。
    多边形面积的计算公式如下:设有n个点(x[1],y[1])(x[2],y[2]),...(x[n],y[n])围成一个没有边相交的多边形,则其围成的闭合多边形面积|S| 为:S=∑y[i] *(x[i+1]-x[i-1]), 其中i=1,2,...n,且当i与j除以n的余数相同的时候,x[i]=x[j],y[i]=y[j]。该公式用于凸凹多边形均可。
    方法2:
    int CImageViewView::GetRgnArea()
    {
    int area = 0;
    int i,j;
    CRect rect;
    CPoint* m_points;
    int m_nPoints;
    CImageViewDoc* pDoc = GetDocument();
    m_nPoints = pDoc->m_aryRectPoint.GetSize();
    m_points = new CPoint[m_nPoints];
    for(i = 0; i<m_nPoints ; i++)//获得所有顶点的位置
    {
    m_points[i] = pDoc->m_aryRectPoint[i]->m_ptPoint;
    }
    CRgn rgn;
    rgn.CreatePolygonRgn(m_points, m_nPoints, ALTERNATE);
    rgn.GetRgnBox(&rect);//获得一个包括该多边形的矩形
    CPoint point;//计算矩形内的点落在多边形内的数量
    for( i = rect.top ; i<rect.bottom;i++)
    for( j = rect.left; j<rect.right ; j++)
    {
    point.x = j; point.y = i;
    if(rgn.PtInRegion(point))
    area ++;
    }
    delete[] m_points;
    return area;
    }
      

  8.   

    小虫还真是个鸟人(此处念diao),我还以为我一个月得1200很牛呢