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

______________________________________________
R-help@r-project.org mailing list
https://stat.ethz.ch/mailman/listinfo/r-help
PLEASE do read the posting guide http://www.R-project.org/posting-guide.html
and provide commented, minimal, self-contained, reproducible code.

Reply via email to