2

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

我预见到数组看起来像这样。对于 100 x 100 x 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))
4

2 回答 2

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()

在此处输入图像描述

于 2014-01-21T03:20:43.990 回答
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
于 2014-01-21T19:47:34.437 回答