小智 5
这是使用 rgl 包的基本示例。您可以轻松地将其变成一个对 3D 数组进行操作的函数,以更改颜色、alpha 或其他感兴趣的功能。
library(rgl)
cubit=cube3d(color="blue", alpha=0.3)
cubit$vb[cubit$vb == -1]= 0
gridx=0:5;gridy=0:5;gridz=0:5
temp=cubit
plot3d(temp,box=FALSE,axes=FALSE,xlab="",ylab="",zlab="")
wire3d(temp,add=TRUE,color="blue",alpha=1)
for(ix in gridx){
for(iy in gridy){
for(iz in gridz){
temp$vb[1,]=cubit$vb[1,]+ix
temp$vb[2,]=cubit$vb[2,]+iy
temp$vb[3,]=cubit$vb[3,]+iz
shade3d(temp,add=TRUE,,alpha=runif(1))
wire3d(temp,add=TRUE,color="blue")
}
}
}
Run Code Online (Sandbox Code Playgroud)
我使用过类似的东西,但我注意到内存大小增长得非常快(我不能使用 3-4Gb RAM 处理超过 60000 个体素)。我尝试过使用plot3D包中的cube3D进行类似的操作,认为非交互式绘图会(应该!)内存效率更高,但由于某种原因,这个包的性能更差(只有1000个体素)。如果您有一个实心立方体,那么您可以更聪明地使用 ploygon3D 图仅绘制外边缘......但这不是我的情况。我仍在寻找使用 R 功能获得更好的性能,但我认为我应该添加到此对话中,以防任何其他流浪灵魂也在这里遇到。