[R] `level' definition in `computeContour3d' (misc3d package)

j. van den hoff veedeehjay at googlemail.com
Sat Nov 9 14:50:29 CET 2013

I'd very much appreciate some help here: I'm in the process of clarifying  
whether I can use `computeContour3d' to derive estimates of the surface  
area of a single closed isosurface (and prospectively the enclosed  
volume). getting the surface area from the list of triangles returned by  
`computeContour3d' is straightforward but I've stumbled over the precise  
meaning of `level' here. looking into the package, ultimately the level is  
used in the namespace function `faceType' which reads:

function (v, nx, ny, level, maxvol)
     if (level == maxvol)
         p <- v >= level
     else p <- v > level
     v[p] <- 1
     v[!p] <- 0
     v[-nx, -ny] + 2 * v[-1, -ny] + 4 * v[-1, -1] + 8 * v[-nx,

my question: is the discrimination of the special case `level == maxvol'  
(or rather of everything else) really desirable? I would argue
that always testing for `v >= level' would be better. if I feed data with  
discrete values (e.g. integer-valued) defined
on a coarse grid into `computeContour3d' it presently makes a big  
difference whether there is a single data point (e.g.) with a value larger
than `level' or not. consider the 1D example:

data1 <- c(0, 0, 1, 1, 1, 1, 1, 0, 0)
data2 <- c(0, 0, 1, 2, 1, 1, 1, 0, 0)

and level = 1

this defines the isocontour `level = 1' to lie at pos 3 and 7 in for data1  
but as lying at pos 4 in data2. actually I would like (and expect) to get  
the same isosurface for `data2' with this `level' setting. in short: the  
meaning/definition of `level' changes depending on whether or not it is  
equal to `maxvol'. this is neither stated in the manpage nor is this  
desirable in my view. but maybe I miss something here. any clarification  
would be appreciated.



More information about the R-help mailing list