Description Usage Arguments Details Value Note References See Also Examples
Computes and renders 3D contours or isosurfaces computed by the marching cubes algorithm.
1 2 3 4 |
f |
a function of 3 arguments or a three dimensional array. |
level |
The level or levels at which to construct contour surfaces. |
x,y,z |
locations of grid planes at which values in |
mask |
a function of 3 arguments returning a logical array, a
three dimensional logical array, or |
color |
color to use for the contour surface. Recycled to the
length of |
color2 |
opposite face color. Recycled to the length of
|
alpha |
alpha channel level, a number between 0 and 1. Recycled to the
length of |
fill |
logical; if |
col.mesh |
color to use for the wire frame. Recycled to the
length of |
smooth |
integer or logical specifying Phong shading level for
"standard" and "grid" engines or whether or not to use shading for
the "rgl" engine. Recycled to the length of |
material |
material specification; currently only used by
"standard" and "grid" engines. Currently possible values are the
character strings "dull", "shiny", "metal", and "default". Recycled
to the length of |
add |
logical; if |
draw |
logical; if |
engine |
character; currently "rgl", "standard", "grid" or "none"; for "none" the computed triangles are returned. |
separate |
logical and one for each |
... |
additional rendering arguments, e.g. material and texture
properties for the "rgl" engine. See documentation for
|
Uses the marching-cubes algorithm, with adjustments for dealing with face and internal ambiguities, to draw isosurfaces. See references for the details.
For the "rgl" engine the returned value is NULL
. For the
"standard" and "grid" engines the returned value is the viewing
transformation as returned by persp
. For the engine "none", or
when draw
is not true, the returned value is a structure
representing the triangles making up the contour, or a list of such
structures for multiple contours.
The "rgl" engine now uses the standard rgl coordinates instead of
negating y
and swapping y
and z
. If you need to
reproduce the previous behavior you can use
options(old.misc3d.orientation=TRUE)
.
Transparency only works properly in the "rgl" engine. For standard or grid graphics on pdf or quartz devices using alpha levels less than 1 does work but the triangle borders show as a less transparent mesh.
Chernyaev E. (1995) Marching Cubes 33: Construction of Topologically Correct Isosurfaces Technical Report CN/95-17, CERN
Daniel Adler, Oleg Nenadic and Walter Zucchini (2003) RGL: A R-library for 3D visualization with OpenGL
Lorensen W. and Cline H. (1987) Marching Cubes: A High Resolution 3D Surface Reconstruction Algorithm Computer Graphics vol. 21, no. 4, 163-169
Nielson G. and Hamann B. (1992) The Asymptotic Decider: Resolving the Ambiguity in Marching Cubes Proc. IEEE Visualization 92, 83-91
triangles3d
, material3d
,
surface3d
.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 | #Example 1: Draw a ball
f <- function(x, y, z)x^2+y^2+z^2
x <- seq(-2,2,len=20)
contour3d(f,4,x,x,x)
contour3d(f,4,x,x,x, engine = "standard")
# ball with one corner removed.
contour3d(f,4,x,x,x, mask = function(x,y,z) x > 0 | y > 0 | z > 0)
contour3d(f,4,x,x,x, mask = function(x,y,z) x > 0 | y > 0 | z > 0,
engine="standard", screen = list(x = 290, y = -20),
color = "red", color2 = "white")
# ball with computed colors
w <- function(x,y,z) {
v <- sin(x) + cos(2 * y) * sin(5 * z)
r <- range(v)
n <- 100
i <- pmax(pmin(ceiling(n * (v - r[1]) / (r[2] - r[1])), n), 1)
terrain.colors(n)[i]
}
contour3d(f,4,x,x,x, color = w)
#Example 2: Nested contours of mixture of three tri-variate normal densities
nmix3 <- function(x, y, z, m, s) {
0.4 * dnorm(x, m, s) * dnorm(y, m, s) * dnorm(z, m, s) +
0.3 * dnorm(x, -m, s) * dnorm(y, -m, s) * dnorm(z, -m, s) +
0.3 * dnorm(x, m, s) * dnorm(y, -1.5 * m, s) * dnorm(z, m, s)
}
f <- function(x,y,z) nmix3(x,y,z,.5,.5)
g <- function(n = 40, k = 5, alo = 0.1, ahi = 0.5, cmap = heat.colors) {
th <- seq(0.05, 0.2, len = k)
col <- rev(cmap(length(th)))
al <- seq(alo, ahi, len = length(th))
x <- seq(-2, 2, len=n)
contour3d(f,th,x,x,x,color=col,alpha=al)
rgl::bg3d(col="white")
}
g(40,5)
gs <- function(n = 40, k = 5, cmap = heat.colors, ...) {
th <- seq(0.05, 0.2, len = k)
col <- rev(cmap(length(th)))
x <- seq(-2, 2, len=n)
m <- function(x,y,z) x > .25 | y < -.3
contour3d(f,th,x,x,x,color=col, mask = m, engine = "standard",
scale = FALSE, ...)
rgl::bg3d(col="white")
}
gs(40, 5, screen=list(z = 130, x = -80), color2 = "lightgray", cmap=rainbow)
## Not run:
#Example 3: Nested contours for FMRI data.
library(AnalyzeFMRI)
a <- f.read.analyze.volume(system.file("example.img", package="AnalyzeFMRI"))
a <- a[,,,1]
contour3d(a, 1:64, 1:64, 1.5*(1:21), lev=c(3000, 8000, 10000),
alpha = c(0.2, 0.5, 1), color = c("white", "red", "green"))
# alternative masking out a corner
m <- array(TRUE, dim(a))
m[1:30,1:30,1:10] <- FALSE
contour3d(a, 1:64, 1:64, 1.5*(1:21), lev=c(3000, 8000, 10000),
mask = m, color = c("white", "red", "green"))
contour3d(a, 1:64, 1:64, 1.5*(1:21), lev=c(3000, 8000, 10000),
color = c("white", "red", "green"),
color2 = c("gray", "red", "green"),
mask = m, engine="standard",
scale = FALSE, screen=list(z = 60, x = -120))
## End(Not run)
#Example 4: Separate the triangles from the contours of
# mixture of three tri-variate normal densities
nmix3 <- function(x, y, z, m, s) {
0.3*dnorm(x, -m, s) * dnorm(y, -m, s) * dnorm(z, -m, s) +
0.3*dnorm(x, -2*m, s) * dnorm(y, -2*m, s) * dnorm(z, -2*m, s) +
0.4*dnorm(x, -3*m, s) * dnorm(y, -3 * m, s) * dnorm(z, -3*m, s) }
f <- function(x,y,z) nmix3(x,y,z,0.5,.1)
n <- 20
x <- y <- z <- seq(-2, 2, len=n)
contour3dObj <- contour3d(f, 0.35, x, y, z, draw=FALSE, separate=TRUE)
for(i in 1:length(contour3dObj))
contour3dObj[[i]]$color <- rainbow(length(contour3dObj))[i]
drawScene.rgl(contour3dObj)
|
Warning message:
no DISPLAY variable so Tk is not available
Loading required package: R.matlab
R.matlab v3.6.2 (2018-09-26) successfully loaded. See ?R.matlab for help.
Attaching package: ‘R.matlab’
The following objects are masked from ‘package:base’:
getOption, isOpen
Loading required package: fastICA
Loading required package: tcltk
Loading required package: tkrplot
Warning message:
loading Rplot failed
Triangles are separated into 3 chunks.
Add the following code to your website.
For more information on customizing the embed code, read Embedding Snippets.