| clipMesh | R Documentation |
Clip a mesh to the volume bounded by another mesh.
clipMesh(mesh, clipper, clipVolume = TRUE, normals = FALSE)
mesh |
a mesh given either as a list containing (at least) the fields
|
clipper |
a mesh given either as a list containing (at least) the fields
|
clipVolume |
Boolean, whether the clipping has to be done on the volume
bounded by |
normals |
Boolean, whether to compute the vertex normals of the output mesh |
A triangle mesh represented as the output of the
Mesh function.
If clipVolume=TRUE, the mesh to be clipped (mesh)
must be without self-intersection.
# cube clipped to sphere
library(MeshesOperations)
library(rgl)
mesh <- cube3d()
clipper <- sphereMesh(r= sqrt(2))
clippedMesh <- clipMesh(mesh, clipper)
open3d(windowRect = c(50, 50, 562, 562))
view3d(zoom = 0.9)
shade3d(toRGL(clippedMesh), color = "purple")
# Barth sextic ####
library(MeshesOperations)
library(rgl)
library(rmarchingcubes)
# isosurface function
gold <- (1+sqrt(5))/2
f <- function(x,y,z){
x2 <- x*x; y2 <- y*y; z2 <- z*z
4*(gold^2*x2-y2)*(gold^2*y2-z2)*(gold^2*z2-x2) -
(1+2*gold)*(x2+y2+z2-1)^2
}
# grid
n <- 200L
x <- y <- z <- seq(-sqrt(3), sqrt(3), length.out = n)
g <- expand.grid(X = x, Y = y, Z = z)
# calculate voxel
voxel <- array(with(g, f(X, Y, Z)), dim = c(n, n, n))
# calculate isosurface
contour_shape <- contour3d(
griddata = voxel, level = 0, x = x, y = y, z = z
)
# make rgl mesh (plotted later)
mesh <- tmesh3d(
vertices = t(contour_shape[["vertices"]]),
indices = t(contour_shape[["triangles"]]),
normals = contour_shape[["normals"]],
homogeneous = FALSE
)
# clip to sphere of radius sqrt(3)
clipper <- sphereMesh(r = sqrt(3))
clippedMesh <- clipMesh(mesh, clipper, clipVolume = FALSE, normals = TRUE)
# plot
open3d(windowRect = c(50, 50, 950, 500))
mfrow3d(1, 2)
view3d(zoom = 0.8)
shade3d(mesh, color = "darkred")
next3d()
view3d(zoom = 0.8)
shade3d(toRGL(clippedMesh), color = "darkred")
Add the following code to your website.
For more information on customizing the embed code, read Embedding Snippets.