R用于计算多边形的面积和质心

时间:2017-01-07 12:25:55

标签: r polygons

创建函数来计算多边形列表的面积和质心(格式为georgia.polys)。多边形区域的公式是

enter image description here

其中A是多边形区域,xi是多边形边界的第i个x坐标(R中的x [i]),yi是多边形边界的第i个y坐标(R中的y [i] ) - 和n是用于指定多边形边界的点数。假设多边形是闭合形式,因此xi和yi取与xn和yn相同的值。 质心具有坐标(Cx,Cy),其中:

enter image description here

这是已创建的代码,但我不确定质心坐标是否正确

library(GISTools)
data("georgia")


polyn<-function(x){

  poly.df<-data.frame()

  for(d in 1:159){
    poly.d<-x[[d]]
    n<-length(poly.d[,1])

    i<-1
    A.sum<-0
    C.xsum<-0
    C.ysum<-0

    while(i<n){

      A.area<-0.5*(poly.d[i,2]*poly.d[i+1,1]-poly.d[i+1,2]*poly.d[i,1])
      A.sum<-A.sum+A.area

      C.x<-(1/(6*A.sum))*(poly.d[i,2]+poly.d[i+1,2])*(poly.d[i,2]*poly.d[i+1,1]-poly.d[i+1,2]*poly.d[i,1])
      C.xsum<-C.xsum+C.x

      C.y<-(1/(6*A.sum))*(poly.d[i,1]+poly.d[i+1,1])*(poly.d[i,2]*poly.d[i+1,1]-poly.d[i+1,2]*poly.d[i,1])
      C.ysum<-C.ysum+C.y

      i<-i+1
    }

    poly.df<-rbind(poly.df, c(A.sum,C.xsum,C.ysum))
    colnames(poly.df) <- c("Area", "Cx", "Cy")
  }

  poly.df

}

polyn(georgia.polys)

这是该功能的一些结果,

          Area           Cx            Cy
1   1326077000    4044403.4    4855396.03 
2    891511462   -2237689.5   -2962558.41 
3    740601936   10709355.7   12996988.27 

有没有人可以帮我处理代码?

1 个答案:

答案 0 :(得分:0)

WinPCapA.sum中的区域C.ysum应该是总区域,而不是取决于迭代器C.xsum的区域。最简单的方法是在计算面积后放置除法。

此外,方程应循环遍历索引i,最后一个顶点与第一个顶点相同。因此,您还应修改代码,使其循环遍历方程式的求和中的最后一种情况。

1,2,...,n+1