我是想用鼠标在picture上画多边形,一个个顶点点 最后一个封闭    'm 是顶点数 p是各个顶点的x y
    If m < 3 Then
        Area = 0
    End If
    a = 0 
    For i = 0 To m - 1
        a = a + p(i).X * p(i + 1).Y - p(i).Y * p(i + 1).X
    Next    Area = 0.5 * Abs(a)为什么我统计出来的面积不准?同样的重新做两遍计算结果相差甚远,或者两个看着差不多大的面积 结果却相差非常多,这个算法有问题么?多边形

解决方案 »

  1.   

    ls的先生,VB的坐标系统和笛卡尔的不同,会影响三角形的面积,从而影响多边形的面积?
      

  2.   

    查了一下任意多边形面积公式:
    S = 1/2∑i=1(XiYi+1-Xi+1Yi)
    你写的公式:
    a = a + p(i).X * p(i + 1).Y - p(i).Y * p(i + 1).X
    看起来是正确的
    但是没有考虑到最后一个顶点
    公式其实应该是XnY1-X1Yn了
    所以:
    For i = 0 To m - 2
      a = a + p(i).X * p(i + 1).Y - p(i + 1).X * p(i).Y
      if i = m - 2 then a = a + p(i + 1).X * p(0).Y - p(0).X * p(i + 1).Y
    Next
      

  3.   


    S = ∑i=1(XiYi+1-Xi+1Yi)/2
    这个公式是算任意形状多边形的
    当然了
    除了6楼说的那种内部镂空的
      

  4.   

    那如何解决呢?我如何能得到正确的面积,是凸多边形我用坐标试验了阿,是正确的。记得加上
    if i = m - 2 then a = a + p(i + 1).X * p(0).Y - p(0).X * p(i + 1).Y跟你说个方法
    1,用固定坐标,用已知的数值测试
    2,在上面画简单图形,比如矩形。然后自己算出来
      

  5.   

    那如何解决呢?我如何能得到正确的面积,是凸多边形我用坐标试验了阿,是正确的。记得加上
    if i = m - 2 then a = a + p(i + 1).X * p(0).Y - p(0).X * p(i + 1).Y跟你说个方法
    1,用固定坐标,用已知的数值测试
    2,在上面画简单图形,比如矩形。然后自己算出来谢谢,我实现了(楼下的哥们 我看了,谢谢),而且用另外一种方法,分割三角形的方法也实现了,但是,我发现这个只局限于凸多边形,如果是凹多边形可能就行了吧
      

  6.   

    那如何解决呢?我如何能得到正确的面积,是凸多边形我用坐标试验了阿,是正确的。记得加上
    if i = m - 2 then a = a + p(i + 1).X * p(0).Y - p(0).X * p(i + 1).Y跟你说个方法
    1,用固定坐标,用已知的数值测试
    2,在上面画简单图形,比如矩形。然后自己算出来谢谢,我实现了(楼下的哥们 我看了,谢谢),而且用另外一种方法,分割三角形的方法也实现了,但是,我发现这个只局限于凸多边形,如果是凹多边形可能就行了吧同学你要从数学角度出发先,这个公式是对于任意多边形的。但是不能有内空的
    你要抽象出来数学公式然后变成程序
    你的那个程序不是自己写的?