2017-01-07 128 views
1

創建計算多邊形列表的面積和質心的函數(格式爲georgia.polys)。對於多邊形的面積的公式是R用於計算多邊形的面積和質心

enter image description here

其中,A是多邊形區域,xi是第i個多邊形邊界的x座標(X [i]於R),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 

有沒有人可以幫助我的代碼?

回答

0

區域A.sumC.ysumC.xsum應該是總面積,但不是取決於您的迭代器i的區域。最簡單的方法是在計算面積之後放置分區。

此外,方程應循環指數1,2,...,n+1,最後一個頂點與第一個頂點相同。因此,你還應該修改你的代碼,以便它在方程式總和中循環最後一種情況。

.... 

while(i<n+1){ 

    j <- ifelse(i+1==n+1,1,i+1) # j=i+1 and j=1 for the last iteration 

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

    C.x<-(poly.d[i,2]+poly.d[j,2])*(poly.d[i,2]*poly.d[j,1]-poly.d[j,2]*poly.d[i,1]) 
    C.xsum<-C.xsum+C.x 

    C.y<-(poly.d[i,1]+poly.d[j,1])*(poly.d[i,2]*poly.d[j,1]-poly.d[j,2]*poly.d[i,1]) 
    C.ysum<-C.ysum+C.y 

    i<-i+1 
} 

C.ysum<-C.ysum/(6*A.sum) 
C.xsum<-C.xsum/(6*A.sum) 
....