R中球体的网格或数组表示

时间:2014-01-21 00:53:47

标签: arrays r spatial r-grid

我有100个点代表半径为.1和中心(.5,.5,.5)的球体的边界。我想用3-D网格上的一系列点来表示这个球体。数组的值将是二进制的。 1表示球体内部,0表示球体外部。表示将在单位立方体上。

我认为阵列看起来像这样。对于数组100乘以100乘以100.(1,1,1)值将为0.(50,50,50)值将为1,因为此网格点位于球体内。

以下是创建和绘制100个(或更多)点的代码。这些要点都在球体的边界上。

library(scatterplot3d)
n <- 100
r <- rep(.1,n)
theta <- runif(n,0,pi)
phi <- runif(n,0,2*pi)
x <- r*sin(theta)*cos(phi)+.5
y <- r*sin(theta)*sin(phi)+.5
z <- r*cos(theta)+.5
graphic <- scatterplot3d(x,y,z,xlim=c(0,1),ylim=c(0,1),zlim=c(0,1))

2 个答案:

答案 0 :(得分:1)

也许这可以帮助你。我猜测可视化不是这里的主要目标,但我已经包含了一系列图像图来显示3d数组的各个部分。

实施例

n=25
cen <- c(0.5,0.5,0.5)
rad <- 1
xs <- seq(cen[1]-rad,cen[1]+rad,,n)
ys <- seq(cen[2]-rad,cen[2]+rad,,n)
zs <- seq(cen[3]-rad,cen[3]+rad,,n)
grd <- expand.grid(x=xs, y=ys, z=zs)
a <- array(0, dim=c(n,n,n))
for(i in seq(a)){
    a[i] <- as.numeric(dist(rbind(grd[i,], cen)) <= rad)
}

png("sections.png", units="in", width=10, height=4, res=400)
op <- par(mfrow=c(1,n), mar=rep(0.1,4))
for(i in seq(n)){
    image(x=xs, y=ys, z=a[,,i], col=c("white", "black"), axes=FALSE, xlab="", ylab="")
    abline(h=xs, col=8, lwd=0.2)
    abline(v=ys, col=8, lwd=0.2)
    #box()
}
par(op)
dev.off()

enter image description here

答案 1 :(得分:1)

n <- 3
x <- 1:n
y <- 1:n
z <- 1:n
grid <- expand.grid(x,y,z)
vec <- ((grid[,1]-rep(n/2+.5,n^3))^2 +
 (grid[,2]-rep(n/2+.5,n^3))^2 +
 (grid[,3]-rep(n/2+.5,n^3))^2)^.5
a <- array(round(vec,3),dim=c(n,n,n))     #in array (pixel) scale                       
a.metric <- a*(1/n)                 #in "metric" scale
a
a.metric
STACK <- array(as.numeric(a.metric <=.1),dim=c(n,n,n))
STACK