Main Content

convhull

説明

k = convhull(P) は、行列 P 内の点の 2 次元または 3 次元の凸包を計算します。

k = convhull(x,y) は、列ベクトル x および y 内の点の 2 次元の凸包を計算します。

k = convhull(x,y,z) は、列ベクトル xy、および z 内の点の 3 次元の凸包を計算します。

k = convhull(___,'Simplify',tf) は、凸包の面積または体積に関係のない頂点を削除するかどうかを指定します。tf は、既定では false です。

[k,av] = convhull(___) も、凸包の面積 (2 次元の点の場合) または体積 (3 次元の点の場合) を計算します。

すべて折りたたむ

2 次元の点の行列を作成します。凸包およびその面積を計算します。

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

体積に影響しない点を削除することにより、3 次元の凸包を単純化します。

3 次元の点の集合を作成します。凸包およびその体積を計算します。凸包をプロットします。

[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 座標、および (3 次元の場合は) z 座標である行列として指定します。

x 座標。列ベクトルとして指定します。

y 座標。列ベクトルとして指定します。

z 座標。列ベクトルとして指定します。

単純化インジケーター。数値として、あるいは logical 0 (false) または 1 (true) として指定します。

出力引数

すべて折りたたむ

インデックス。ベクトルまたは行列として返されます。

  • 2 次元の点の場合、k は、凸包を構成する反時計回りに配置された入力点の行インデックスを含む列ベクトル。

  • 3 次元の点の場合、k は、凸包を構成する三角形分割を表す 3 列の行列。行はそれぞれ、三角形分割の 1 つの小平面を表します。値は入力点の行インデックスを表します。

凸包の面積または体積。スカラーとして返されます。

  • 2 次元の点の場合、av は凸包の面積。

  • 3 次元の点の場合、av は凸包の体積。

ヒント

  • convhull の出力を 2 次元でプロットするには、関数 plot を使用します。convhull の出力を 3 次元でプロットするには、trisurf または trimesh を使用します。

拡張機能

バージョン履歴

R2006a より前に導入

参考