Main Content

boundary

Boundary of a set of points in 2-D or 3-D

Description

example

k = boundary(x,y) returns a vector of point indices representing a single conforming 2-D boundary around the points (x,y). The points (x(k),y(k)) form the boundary. Unlike the convex hull, the boundary can shrink towards the interior of the hull to envelop the points.

example

k = boundary(x,y,z) returns a triangulation representing a single conforming 3-D boundary around the points (x,y,z). Each row of k is a triangle defined in terms of the point indices.

example

k = boundary(P) specifies points (x,y) or (x,y,z) in the columns of matrix P.

example

k = boundary(___,s) specifies shrink factor s using any of the previous syntaxes. s is a scalar between 0 and 1. Setting s to 0 gives the convex hull, and setting s to 1 gives a compact boundary that envelops the points. The default shrink factor is 0.5.

example

[k,v] = boundary(___) also returns a scalar v, which is the area (2-D) or volume (3-D) which boundary k encloses.

Examples

collapse all

Create and plot a set of random 2-D points.

rng('default')
x = rand(30,1);
y = rand(30,1);
plot(x,y,'.')
xlim([-0.2 1.2])
ylim([-0.2 1.2])

Figure contains an axes object. The axes object contains an object of type line.

Compute a boundary around the points using the default shrink factor.

k = boundary(x,y);
hold on;
plot(x(k),y(k));

Figure contains an axes object. The axes object contains 2 objects of type line.

Create a new boundary around the points using a shrink factor of 0.1. The result is a less compact boundary enveloping the points.

j = boundary(x,y,0.1);
hold on;
plot(x(j),y(j));

Figure contains an axes object. The axes object contains 3 objects of type line.

Create and plot a set of random 3-D points.

rng('default')
P = rand(30,3);
plot3(P(:,1),P(:,2),P(:,3),'.','MarkerSize',10)
grid on

Figure contains an axes object. The axes object contains an object of type line.

Plot the boundary using the default shrink factor.

k = boundary(P);
hold on
trisurf(k,P(:,1),P(:,2),P(:,3),'Facecolor','red','FaceAlpha',0.1)

Figure contains an axes object. The axes object contains 2 objects of type line, patch.

Create and plot a set of random 3-D points.

rng default;
P = rand(30,3);
plot3(P(:,1),P(:,2),P(:,3),'.')
grid on

Figure contains an axes object. The axes object contains an object of type line.

Compute two boundaries: one with a shrink factor of 0 and the other with a shrink factor of 1.

k = boundary(P,0);
j = boundary(P,1);

Compare the shrink factors by plotting the original points and the two boundaries side-by-side.

subplot(1,2,1);
plot3(P(:,1),P(:,2),P(:,3),'.','MarkerSize',10)
hold on
trisurf(k,P(:,1),P(:,2),P(:,3),'FaceColor','red','FaceAlpha',0.1)
axis equal
title('Shrink Factor = 0')

subplot(1,2,2);
plot3(P(:,1),P(:,2),P(:,3),'.','MarkerSize',10)
hold on
trisurf(j,P(:,1),P(:,2),P(:,3),'FaceColor','red','FaceAlpha',0.1)
axis equal
title('Shrink Factor = 1')

Figure contains 2 axes objects. Axes object 1 with title Shrink Factor = 0 contains 2 objects of type line, patch. Axes object 2 with title Shrink Factor = 1 contains 2 objects of type line, patch.

Create and plot a set of random 3-D points.

rng('default')
P = rand(30,3);
plot3(P(:,1),P(:,2),P(:,3),'.')
grid on

Figure contains an axes object. The axes object contains an object of type line.

Use the boundary function to compute a boundary around the points, and find the volume of the resulting shape.

[~, vol] = boundary(P);
vol
vol = 0.2962

Input Arguments

collapse all

x-coordinates of points, specified as a column vector.

Data Types: double

y-coordinates of points, specified as a column vector.

Data Types: double

z-coordinates of points, specified as a column vector.

Data Types: double

Point coordinates, specified as a matrix with two columns (for a 2-D alpha shape) or a matrix with three columns (for a 3-D alpha shape).

  • For 2-D, the columns of P represent x and y coordinates, respectively.

  • For 3-D, the columns of P represent x, y, and z coordinates, respectively.

Data Types: double

Shrink factor, specified as a scalar in the range of [0,1].

  • s = 0 corresponds to the convex hull of the points.

  • s = 1 corresponds to the tightest single-region boundary around the points.

The default shrink factor is 0.5. Specify a larger or smaller shrink factor to tighten or loosen the boundary around the points, respectively.

Example: k = boundary(x,y,0.76) specifies a shrink factor of 0.76, producing a tighter boundary than the default.

Output Arguments

collapse all

Boundary point indices, returned as a vector or matrix. k contains the indices of the input points that lie on the boundary.

  • For 2-D problems, k is a column vector of point indices representing the sequence of points around the boundary, which is a polygon.

  • For 3-D problems, k is a triangulation matrix of size mtri-by-3, where mtri is the number of triangular facets on the boundary. Each row of k defines a triangle in terms of the point indices, and the triangles collectively form a bounding polyhedron.

Area or volume enclosed by boundary, returned as a scalar.

  • For 2-D problems, v is the area enclosed by boundary k.

  • For 3-D problems, v is the volume enclosed by boundary k.

Algorithms

boundary constructs an alphaShape from the specified points and then uses boundaryFacets to determine which points lie on the boundary.

Extended Capabilities

Introduced in R2014b