rapids/src/features/location_barnett/RadiusOfGyration.R

37 lines
727 B
R

RadiusOfGyration <-
function(mat,ITRVL){
mat=matrix(mat,ncol=7)
IDskip=which(mat[,1]==4)
if(length(IDskip)>0){
mat=matrix(mat[-IDskip,],ncol=7)
}
N=nrow(mat)
w_v=rep(0,N)
x_v=rep(0,N)
y_v=rep(0,N)
for(i in 1:N){
if(mat[i,1]==4){
next
}
if(mat[i,1]==3){
x_v[i]=mat[i,2]
y_v[i]=mat[i,3]
w_v[i]=ITRVL
}
if(mat[i,1]==1){
x_v[i]=mean(mat[i,c(2,5)])
y_v[i]=mean(mat[i,c(3,6)])
w_v[i]=mat[i,7]-mat[i,4]
}
if(mat[i,1]==2){
x_v[i]=mat[i,2]
y_v[i]=mat[i,3]
w_v[i]=mat[i,7]-mat[i,4]
}
}
sumw_v=sum(w_v)
xavg=sum(w_v*x_v)/sumw_v
yavg=sum(w_v*y_v)/sumw_v
return(sqrt(sum(((x_v-xavg)^2+(y_v-yavg)^2)*w_v)/sumw_v))
}