Main Content

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

convhull

说明

示例

k = convhull(P) 计算矩阵 P 中点的二维或三维凸包。

k = convhull(x,y) 计算列向量 xy 中点的二维凸包。

示例

k = convhull(x,y,z) 计算列向量 xyz 中点的三维凸包。

示例

k = convhull(___,'Simplify',tf) 指定是否删除不影响凸包面积或体积的顶点。默认情况下,tffalse

示例

[k,av] = convhull(___) 还计算凸包的面积(对于二维点)或体积(对于三维点)。

示例

全部折叠

创建一个由二维点组成的矩阵。计算凸包及其面积。

P = [0 0; 1 1; 1.5 0.5; 1.5 -0.5; 1.25 0.3; 1 0; 1.25 -0.3; 1 -1];
[k,av] = convhull(P);

绘制原始点及凸包。

plot(P(:,1),P(:,2),'*')
hold on
plot(P(k,1),P(k,2))

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

显示面积。

av
av = 1.7500

通过删除不影响其体积的点来简化三维凸包。

创建一个三维点集。计算凸包及其体积。绘制凸包图。

[x,y,z] = meshgrid(-2:1:2,-2:1:2,-2:1:2);
x = x(:);
y = y(:);
z = z(:);

[k1,av1] = convhull(x,y,z);

trisurf(k1,x,y,z,'FaceColor','cyan')
axis equal

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

计算并绘制包含较少点但保持体积不变的凸包的简化版本。

[k2,av2] = convhull(x,y,z,'Simplify',true);

trisurf(k2,x,y,z,'FaceColor','cyan')
axis equal

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

显示两个凸包的体积。两者体积相同,但简化的凸包使用的点更少。

av1
av1 = 64.0000
av2
av2 = 64

输入参数

全部折叠

点,指定为矩阵,该矩阵的列为 x 坐标、y 坐标和(三维情况下)z 坐标。

x 坐标,指定为列向量。

y 坐标,指定为列向量。

z 坐标,指定为列向量。

简化指示符,指定为数值或逻辑值 0 (false) 或 1 (true)。

输出参数

全部折叠

索引,以向量或矩阵形式返回。

  • 对于二维点,k 是一个列向量,其中包含构成凸包的输入点的行索引,按逆时针排列。

  • 对于三维点,k 是表示构成凸包的三角剖分的三列矩阵。每行表示三角剖分的一个分面。值表示输入点的行索引。

凸包的面积或体积,以标量形式返回。

  • 对于二维点,av 是凸包的面积。

  • 对于三维点,av 是凸包的体积。

提示

  • 要以二维形式绘制 convhull 的输出,请使用 plot 函数。要以三维形式绘制 convhull 的输出,请使用 trisurftrimesh 函数。

扩展功能

版本历史记录

在 R2006a 之前推出

另请参阅