Main Content

本页翻译不是最新的。点击此处可查看最新英文版本。

boundary

二维或三维空间内的一组点的边界

说明

示例

k = boundary(x,y) 返回一个表示包围点 (x,y) 的单个相容二维边界的点索引向量。点 (x(k),y(k)) 构成边界。与凸包不同,边界可以向内部收缩以包围这些点。

示例

k = boundary(x,y,z) 返回一个表示包围点 (x,y,z) 的单个相容三维边界的三角剖分。k 的每一行都是以点索引形式定义的三角形。

示例

k = boundary(P) 指定矩阵 P 的各列中的点 (x,y)(x,y,z)

示例

k = boundary(___,s) 结合上述语法指定收缩因子 ss 是一个介于 01 之间的标量。将 s 设置为 0 可生成凸包,将 s 设置为 1 可生成包围这些点的紧凑边界。默认收缩因子是 0.5

示例

[k,v] = boundary(___) 还返回一个标量 v,它是边界 k 围住的面积(二维)或体积(三维)。

示例

全部折叠

创建并绘制一个随机二维点集。

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 contains a line object which displays its values using only markers.

使用默认收缩因子计算包围这些点的边界。

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. One or more of the lines displays its values using only markers

使用收缩因子 0.1 新建一个包围这些点的边界。结果产生包围这些点的不太紧凑的边界。

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. One or more of the lines displays its values using only markers

创建并绘制一个随机三维点集。

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

Figure contains an axes object. The axes contains a line object which displays its values using only markers.

使用默认收缩因子绘制边界。

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. One or more of the lines displays its values using only markers

创建并绘制一个随机三维点集。

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

Figure contains an axes object. The axes contains a line object which displays its values using only markers.

计算两个边界:一个使用收缩因子 0,另一个使用收缩因子 1。

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

通过并排绘制原点和两个边界来比较收缩因子。

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. One or more of the lines displays its values using only markers Axes object 2 with title Shrink Factor = 1 contains 2 objects of type line, patch. One or more of the lines displays its values using only markers

创建并绘制一个随机三维点集。

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

Figure contains an axes object. The axes contains a line object which displays its values using only markers.

使用 boundary 函数可计算包围点的边界,并求出生成形状的体积。

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

输入参数

全部折叠

点的 x 坐标,指定为列向量。

数据类型: double

点的 y 坐标,指定为列向量。

数据类型: double

点的 z 坐标,指定为列向量。

数据类型: double

点的坐标,指定为包含两列的矩阵(对于二维 alpha 形状)或包含三列的矩阵(对于三维 alpha 形状)。

  • 对于二维形状,P 的列分别表示 x 坐标和 y 坐标。

  • 对于三维形状,P 的列分别表示 xyz 坐标。

数据类型: double

收缩因子,指定为 [0,1] 范围中的一个标量。

  • s = 0 对应于这些点的凸包。

  • s = 1 对应于包围这些点的最紧凑单区域边界。

默认收缩因子是 0.5。指定更大或更小的收缩因子可相应地收紧或放松包括这些点的边界。

示例: k = boundary(x,y,0.76) 指定收缩因子 0.76,并产生一个比默认值更紧凑的边界。

输出参数

全部折叠

以向量或矩阵形式返回的边界点索引。k 包含位于边界上的输入点的索引。

  • 对于二维问题,k 是一个由点索引组成的列向量,这些点索引表示包围边界(多边形)的点序列。

  • 对于三维问题,k 是大小为 mtri×3 的三角剖分矩阵,其中 mtri 是边界上的三角面数。k 的每一行根据点索引定义一个三角形,这些三角形共同构成一个有界多面体。

边界包围的面积或体积,以标量形式返回。

  • 对于二维问题,v 是边界 k 包围的面积。

  • 对于三维问题,v 是边界 k 包围的体积。

算法

boundary 基于指定的点构造 alphaShape,然后使用 boundaryFacets 确定哪些点位于边界上。

扩展功能

版本历史记录

在 R2014b 中推出