2017-01-07 3 views
1

다각형 목록의 면적과 중심을 계산하는 함수를 만듭니다 (georgia.polys 형식). 다각형의 면적의 공식R은 다각형의 면적과 중심을 계산합니다.

enter image description here A는 다각형 영역은

이고, XI는 I 번째 다각형 경계의 x 좌표 (X의 [내가]는 R에) 이순신은 I은 폴리곤 경계의 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) 
....