R: Find surface triangles from tetrahedral mesh

surf.tri {geometry} | R Documentation

## Find surface triangles from tetrahedral mesh

### Description

Find surface triangles from tetrahedral mesh typically obtained with `delaunayn`.

### Usage

    surf.tri(p, t)

### Arguments

`p` | An `n`-by-`3` matrix. The rows of `p` represent `n` points in `dim`-dimensional space.
`t` | Matrix with 4 columns, interpreted as output of `delaunayn`.

### Details

`surf.tri` and `convhulln` serve a similar purpose in 3D, but `surf.tri` also works for non-convex meshes obtained e.g. with `distmeshnd`. It also does not produce currently unavoidable diagnostic output on the console as `convhulln` does at the Rterm console–i.e., `surf.tri` is silent.

### Value

An `m`-by-`3` index matrix of which each row defines a triangle. The indices refer to the rows in `p`.

### Note

`surf.tri` was based on Matlab code for mesh of Per-Olof Persson (http://persson.berkeley.edu/distmesh/).

### Author(s)

Raoul Grasman

### See Also

`tri.mesh`, `convhulln`, `surf.tri`, `distmesh2d`

### Examples

    ## Not run:
    # more extensive example of surf.tri

    # url's of publically available data:
    data1.url = "http://neuroimage.usc.edu/USCPhantom/mesh_data.bin"
    data2.url = "http://neuroimage.usc.edu/USCPhantom/CT_PCS_trans.bin"

    meshdata = R.matlab::readMat(url(data1.url))
    elec = R.matlab::readMat(url(data2.url))$eeg.ct2pcs/1000
    brain = meshdata$mesh.brain[,c(1,3,2)]
    scalp = meshdata$mesh.scalp[,c(1,3,2)]
    skull = meshdata$mesh.skull[,c(1,3,2)]
    tbr = t(surf.tri(brain, delaunayn(brain)))
    tsk = t(surf.tri(skull, delaunayn(skull)))
    tsc = t(surf.tri(scalp, delaunayn(scalp)))
    rgl::rgl.triangles(brain[tbr,1], brain[tbr,2], brain[tbr,3],col="gray")
    rgl::rgl.triangles(skull[tsk,1], skull[tsk,2], skull[tsk,3],col="white", alpha=0.3)
    rgl::rgl.triangles(scalp[tsc,1], scalp[tsc,2], scalp[tsc,3],col="#a53900", alpha=0.6)
    rgl::rgl.viewpoint(-40,30,.4,zoom=.03)
    lx = c(-.025,.025); ly = -c(.02,.02);
    rgl::rgl.spheres(elec[,1],elec[,3],elec[,2],radius=.0025,col='gray')
    rgl::rgl.spheres( lx, ly,.11,radius=.015,col="white")
    rgl::rgl.spheres( lx, ly,.116,radius=.015*.7,col="brown")
    rgl::rgl.spheres( lx, ly,.124,radius=.015*.25,col="black")

    ## End(Not run)

[Package geometry version 0.4.0 Index]