Plot the convex hull of a set of points in 3D.
Usage
plotHull3D(
pts,
drawPoints = FALSE,
drawLines = TRUE,
drawPolygons = TRUE,
addText = FALSE,
addRays = FALSE,
useRGLBBox = TRUE,
direction = 1,
drawBBoxHull = TRUE,
...
)
Arguments
- pts
A matrix with a point in each row.
- drawPoints
Draw the points.
- drawLines
Draw lines of the facets.
- drawPolygons
Fill the facets.
- addText
Add text to the points. Currently
coord
(coordinates),rownames
(rownames) andboth
supported or a vector with text.- addRays
Add the ray defined by
direction
.- useRGLBBox
Use the RGL bounding box when add rays.
- direction
Ray direction. If i'th entry is positive, consider the i'th column of
pts
plus a value greater than on equal zero (minimize objective $i$). If negative, consider the i'th column ofpts
minus a value greater than on equal zero (maximize objective $i$).- drawBBoxHull
If
addRays
then draw the hull areas hitting the bounding box also.- ...
Further arguments passed on the the RGL plotting functions. This must be done as lists (see examples). Currently the following arguments are supported:
argsPlot3d
: A list of arguments forrgl::plot3d
.argsSegments3d
: A list of arguments forrgl::segments3d
.argsPolygon3d
: A list of arguments forrgl::polygon3d
.argsShade3d
: A list of arguments forrgl::shade3d
.argsText3d
: A list of arguments forrgl::text3d
.
Examples
# \donttest{
ini3D()
pts<-matrix(c(0,0,0), ncol = 3, byrow = TRUE)
plotHull3D(pts) # a point
pts<-matrix(c(1,1,1,2,2,2,3,3,3), ncol = 3, byrow = TRUE)
plotHull3D(pts, drawPoints = TRUE) # a line
pts<-matrix(c(1,0,0,1,1,1,1,2,2,3,1,1,3,3,3), ncol = 3, byrow = TRUE)
plotHull3D(pts, drawLines = FALSE, argsPolygon3d = list(alpha=0.6)) # a polygon
pts<-matrix(c(5,5,5,10,10,5,10,5,5,5,5,10), ncol = 3, byrow = TRUE)
lst <- plotHull3D(pts, argsPolygon3d = list(alpha=0.9), argsSegments3d = list(color="red"))
finalize3D()
3D plot
# pop3d(id = lst$ids) # remove last hull
## Using addRays
pts <- data.frame(x = c(1,3), y = c(1,3), z = c(1,3))
ini3D(argsPlot3d = list(xlim = c(0,max(pts$x)+10),
ylim = c(0,max(pts$y)+10),
zlim = c(0,max(pts$z)+10)))
plotHull3D(pts, drawPoints = TRUE, addRays = TRUE, , drawBBoxHull = FALSE)
plotHull3D(c(4,4,4), drawPoints = TRUE, addRays = TRUE)
finalize3D()
3D plot
pts <- data.frame(x = c(4,2.5,1), y = c(1,2.5,4), z = c(1,2.5,4))
ini3D(argsPlot3d = list(xlim = c(0,max(pts$x)+10),
ylim = c(0,max(pts$y)+10),
zlim = c(0,max(pts$z)+10)))
plotHull3D(pts, drawPoints = TRUE, addRays = TRUE)
finalize3D()
3D plot
pts <- matrix(c(
0, 4, 8,
0, 8, 4,
8, 4, 0,
4, 8, 0,
4, 0, 8,
8, 0, 4,
4, 4, 4,
6, 6, 6
), ncol = 3, byrow = TRUE)
ini3D(FALSE, argsPlot3d = list(xlim = c(min(pts[,1])-2,max(pts[,1])+10),
ylim = c(min(pts[,2])-2,max(pts[,2])+10),
zlim = c(min(pts[,3])-2,max(pts[,3])+10)))
plotHull3D(pts, drawPoints = TRUE, addText = "coord")
plotHull3D(pts, addRays = TRUE)
finalize3D()
3D plot
pts <- genNDSet(3, 100, dubND = FALSE)
pts <- as.data.frame(pts[,1:3])
ini3D(argsPlot3d = list(
xlim = c(0,max(pts[,1])+10),
ylim = c(0,max(pts[,2])+10),
zlim = c(0,max(pts[,3])+10)))
plotHull3D(pts, drawPoints = TRUE, addRays = TRUE)
finalize3D()
3D plot
ini3D(argsPlot3d = list(
xlim = c(0,max(pts[,1])+10),
ylim = c(0,max(pts[,2])+10),
zlim = c(0,max(pts[,3])+10)))
plotHull3D(pts, drawPoints = TRUE, drawPolygons = TRUE, addText = "coord", addRays = TRUE)
finalize3D()
3D plot
ini3D(argsPlot3d = list(
xlim = c(0,max(pts[,1])+10),
ylim = c(0,max(pts[,2])+10),
zlim = c(0,max(pts[,3])+10)))
plotHull3D(pts, drawPoints = TRUE, drawLines = FALSE,
argsPolygon3d = list(alpha = 1), addRays = TRUE)
finalize3D()
3D plot
ini3D(argsPlot3d = list(
xlim = c(0,max(pts[,1])+10),
ylim = c(0,max(pts[,2])+10),
zlim = c(0,max(pts[,3])+10)))
plotHull3D(pts, drawPoints = TRUE, argsPolygon3d = list(color = "red"), addRays = TRUE)
plotCones3D(pts, argsPolygon3d = list(alpha = 1), rectangle = TRUE)
finalize3D()
3D plot
# }