Learn R Programming

alphahull (version 2.5)

ashape: alpha-shape calculation

Description

This function calculates the \(\alpha\)-shape of a given sample for \(\alpha>0\).

Usage

ashape(x, y = NULL, alpha)

Arguments

x, y

The x and y coordinates of a set of points. Alternatively, a single argument x can be provided, see Details.

alpha

Value of \(\alpha\).

Value

A list with the following components:

edges

A n.seg-row matrix with the coordinates and indexes of the edges of the Delaunay triangulation that form the \(\alpha\)-shape. The number of rows n.seg coincides with the number of segments of the \(\alpha\)-shape. The matrix also includes information of the Voronoi extremes corresponding to each segment.

length

Length of the \(\alpha\)-shape.

alpha

Value of \(\alpha\).

alpha.extremes

Vector with the indexes of the sample points that are \(\alpha\)-extremes. See Edelsbrunnner et al. (1983).

delvor.obj

Object of class "delvor" returned by the delvor function.

x

A 2-column matrix with the coordinates of the set of points.

Details

An attempt is made to interpret the arguments x and y in a way suitable for computing the \(\alpha\)-shape, see xy.coords.

The \(\alpha\)-shape is defined for any finite number of points. However, since the algorithm is based on the Delaunay triangulation, at least three non-collinear points are required.

If y is NULL and x is an object of class "delvor", then the \(\alpha\)-shape is computed without invoking again the function delvor (it reduces the computational cost).

The function ashape returns (among other values) the matrix edges. The structure of edges is that of matrix mesh returned by the function delvor. Note that the \(\alpha\)-shape is a subgraph of the Delaunay triangulation and, therefore, edges is a submatrix of mesh.

References

Edelsbrunner, H., Kirkpatrick, D.G. and Seidel, R. (1983). On the shape of a set of points in the plane. IEEE Transactions on Information Theory, 29(4), pp.551-559.

See Also

plot.ashape, delvor.

Examples

Run this code
# NOT RUN {
# Uniform sample of size n=300 in the annulus B(c,0.5)\B(c,0.25), 
# with c=(0.5,0.5). 
n <- 300
theta<-runif(n,0,2*pi)
r<-sqrt(runif(n,0.25^2,0.5^2))
x<-cbind(0.5+r*cos(theta),0.5+r*sin(theta))
# Value of alpha
alpha <- 0.1
# alpha-shape 
ashape.obj <- ashape(x, alpha = alpha)
# If we change the value of alpha there is no need to compute
# again the Delaunay triangulation and Voronoi Diagram
alpha <- 0.4
ashape.obj.new <- ashape(ashape.obj$delvor.obj, alpha = alpha)

# Random sample  from a uniform distribution on a Koch snowflake 
# with initial side length 1 and 3 iterations
x <- rkoch(2000, side = 1, niter = 3)
# Value of alpha
alpha <- 0.05
# alpha-shape 
ashape.obj <- ashape(x, alpha = alpha)
# }

Run the code above in your browser using DataLab