2017-01-07 25 views
1

ポリゴンリストの面積と重心を計算する関数を作成します(georgia.polysの形式)。ポリゴンの面積の式はポリゴンの面積と重心を計算するためのR

Aは多角形領域であり、Xiはポリゴン境界(RにおけるX [i])とのx座標I THであり、Yiはiは

enter image description here

ありますポリゴン境界のy座標(Rのy [i]) - nはポリゴン境界を指定するために使用される点の数です。ポリゴンは、xiとyiがxnとynと同じ値をとるように閉じた形であると仮定されます。ここ

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) 

正しいないでくださいイム: 重心座標(Cxとは、Cy)を有していますその機能は、

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

誰かが私のコードを助けることができますか?

答えて

0

C.ysumC.xsumの領域A.sumは、合計領域である必要がありますが、反復子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) 
.... 
関連する問題