persp3d.triSht {rgl} | R Documentation

## Plot an interp or tripack Delaunay triangulation.

### Description

The `tri.mesh()` functions in the interp and tripack packages compute a Delaunay triangulation of a set of points. These functions display it as a surface.

### Usage

    ## S3 method for class 'triSht'
    plot3d(x, z, ...)
    ## S3 method for class 'triSht'
    persp3d(x, z, ..., add = FALSE)
    ## S3 method for class 'triSht'
    as.mesh3d(x, z, col = "gray", coords = c("x", "y", "z"),
        smooth = TRUE, normals = NULL, texcoords = NULL, ...)
    ## S3 method for class 'tri'
    plot3d(x, z, ...)
    ## S3 method for class 'tri'
    persp3d(x, z, ..., add = FALSE)
    ## S3 method for class 'tri'
    as.mesh3d(x, z, col = "gray", coords = c("x", "y", "z"),
        smooth = TRUE, normals = NULL, texcoords = NULL, ...)

### Arguments

`x` | A `"triSht"` or `"tri"` object, produced by the `tri.mesh()` function in the interp or tripack packages respectively.
`z` | z coordinate values corresponding to each of the nodes in `x`.
`add` | Whether to add surface to existing plot (`add = TRUE`) or create a new plot (`add = FALSE`, the default).
`col` | Colors to apply to each vertex in the triangulation. Will be recycled as needed.
`coords` | See Details below.
`smooth` | Whether to average normals at vertices for a smooth appearance.
`normals` | User-specified normals at each vertex. Requires `smooth = FALSE`.
`texcoords` | Texture coordinates at each vertex.
`...` | See Details below.

### Details

These functions construct a `mesh3d` object corresponding to the triangulation in `x`. The `plot3d` and `persp3d` methods plot it.

The `coords` parameter allows surfaces to be plotted over any coordinate plane. It should be a permutation of the column names `c("x", "y", "z")`. The first will be used as the x coordinate, the second as the y coordinate, and the third as the z coordinate.

The `...` parameters in `plot3d.triSht` and `plot3d.tri` are passed to `persp3d`; in `persp3d.triSht` and `persp3d.tri` they are passed to both `as.mesh3d` and `persp3d.mesh3d`; in `as.mesh3d.triSht` and `as.mesh3d.tri` they are used as material parameters in a `tmesh3d` call.

`"tri"` objects may contain constraints. These appear internally as extra nodes, representing either the inside or outside of boundaries on the region being triangulated. Each of these nodes should also have a `z` value, but triangles corresponding entirely to constraint nodes will not be drawn. In this way complex, non-convex regions can be triangulated. See the second example below.

### Note

If there are duplicate points, the `tri.mesh()` functions will optionally delete some of them. If you choose this option, the `z` values must correspond to the nodes after deletion, not before.

### Examples

    x <- rnorm(200, sd = 5)
    y <- rnorm(200, sd = 5)
    r <- sqrt(x^2 + y^2)
    z <- 10 * sin(r)/r
    col <- cm.colors(20)[1 + round(19*(z - min(z))/diff(range(z)))]
    save <- NULL
    if (requireNamespace("interp", quietly = TRUE)) {
      save <- options(rgl.meshColorWarning = FALSE)
      dxy <- interp::tri.mesh(x, y)
      open3d()
      persp3d(dxy, z, col = col, meshColor = "vertices")
      open3d()
      # Do it without smoothing and with a different orientation.
      persp3d(dxy, z, col = col, coords = c("z", "x", "y"), smooth = FALSE)
    }
    if (requireNamespace("tripack", quietly = TRUE)) {
      if (is.null(save))
        save <- options(rgl.meshColorWarning = FALSE)

      # Leave a circular hole around (3, 0)
      theta <- seq(0, 2*pi, len = 30)[-1]
      cx <- 2*cos(theta) + 3
      cy <- 2*sin(theta)
      keep <- (x - 3)^2 + y^2 > 4
      dxy2 <- tripack::tri.mesh(x[keep], y[keep])
      dxy2 <- tripack::add.constraint(dxy2, cx, cy)
      z <- dxy2$x^2 - dxy2$y^2
      col <- terrain.colors(20)[1 + round(19*(z - min(z))/diff(range(z)))]
      open3d()
      persp3d(dxy2, z, col = col)
    }
    options(save)

[Package rgl version 0.100.19 Index]