[R] Plotting a cloud/fog of variable density in rgl
JiHO
jo.lists at gmail.com
Mon Nov 22 18:51:04 CET 2010
Hi everyone,
I want to plot a 3D interpolation of the concentration of aquatic
organisms. My goal would be to have the result represented as clouds
with a density proportional to the abundance of organisms, so that I
could fly (well, swim actually ;) ) through the scene and see the
patches here and there. Basically, I want to do something like this:
http://www.youtube.com/watch?v=27mo_Y-aU-c
but simpler and with only clouds.
I though about doing it this way:
1- interpolate to a fine grid
2- plot points at each grid intersection of transparency inversely
proportional to abundance
3- blur/fog a bit each point to create the general impression of a cloud
So far I am stuck on 3 but maybe there is a better overall solution.
Here is some code that reads the result of the interpolation on a
coarse grid and plots it:
# read a set of gridded data points in 3D
d = read.table("http://dl.dropbox.com/u/1047321/R/test3Ddata.txt", header=T)
# plot
library("rgl")
spheres3d(d$x, d$y, d$z, alpha=alpha, radius=0.05)
And here is a version that actually performs the interpolation a
random set of points in 3D through kriging in case you want to try
with increase precision.
# create a set of random data points in 3D
n = 50
data3D = data.frame(x = runif(n), y = runif(n), z = runif(n), v = rnorm(n))
# do 3d interpolation via kriging
library("gstat")
coordinates(data3D) = ~x+y+z
range1D = seq(from = 0, to = 1, length = 10)
grid3D = expand.grid(x = range1D, y = range1D, z = range1D)
gridded(grid3D) = ~x+y+z
res3D = krige(formula = v ~ 1, data3D, grid3D, model = vgm(1, "Exp", .2))
# convert the result to a data.frame
d = as.data.frame(res3D)
# compute transparency (proportional to the interpolated value)
maxD = max(d$var1.pred)
minD = min(d$var1.pred)
alpha = (d$var1.pred - minD)/(maxD - minD)
# reduce maximum alpha (all points are semi-transparent)
alpha = alpha/5
# plot
library("rgl")
spheres3d(d$x, d$y, d$z, alpha=alpha, radius=0.05)
I saw the fog effect but it seems to add a fog in the scene to
increase depth. What I want is my scene to actually look like a fog.
Thanks in advance for any help. Sincerely,
JiHO
---
http://maururu.net
More information about the R-help
mailing list