Main Content

boundary

2 次元または 3 次元の点集合の境界

説明

k = boundary(x,y) は、点集合 (x,y) を単一の領域で囲む 2 次元の境界を表す点のインデックスのベクトルを返します。これらの点 (x(k),y(k)) をつないで境界が形成されます。凸包とは異なり、境界は一連の点を囲む内側の方向に向かって縮小することができます。

k = boundary(x,y,z) は、点集合 (x,y,z) を単一の領域で囲む 3 次元の境界を表す三角形分割を返します。k の各行は点インデックスとして定義されている三角形です。

k = boundary(P) は、行列 P の列の点 (x,y) または (x,y,z) を指定します。

k = boundary(___,s) は、前述のいずれかの構文を使用して縮小係数 s を指定します。s0 から 1 までのスカラーです。s0 に設定すると凸包になり、s1 に設定すると点集合を囲むコンパクトな境界が得られます。既定の縮小係数は 0.5 です。

[k,v] = boundary(___) は、境界 k の内部の面積 (2 次元) または体積 (3 次元) を表すスカラー v も返します。

すべて折りたたむ

2 次元の乱数点の集合を作成してプロットします。

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

3 次元の乱数点の集合を作成してプロットします。

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

3 次元の乱数点の集合を作成してプロットします。

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 の 2 つの境界を計算します。

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

縮小係数が異なる 2 つの境界を元の点も含めて並べてプロットし、結果を比較します。

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

3 次元の乱数点の集合を作成してプロットします。

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

点の座標。2 列の行列 (2 次元アルファ形状の場合) または 3 列の行列 (3 次元アルファ形状の場合) として指定します。

  • 2 次元の場合、P の各列は x 座標と y 座標を表します。

  • 3 次元の場合、P の各列は x 座標、y 座標、z 座標を表します。

データ型: double

縮小係数。[0,1] の範囲のスカラーとして指定します。

  • s = 0 は、点集合の凸包に対応します。

  • s = 1 は、点集合を単一の領域で囲む最も狭い境界に対応します。

既定の縮小係数は 0.5 です。縮小係数を大きくしたり小さくしたりすると、点集合の境界がそれに応じて拡大または縮小されます。

例: k = boundary(x,y,0.76) は縮小係数を 0.76 に指定します。既定よりも狭い境界が生成されます。

出力引数

すべて折りたたむ

境界の点のインデックス。ベクトルまたは行列として返されます。k には、入力で指定した点のうち、境界上にある点のインデックスが格納されます。

  • 2 次元の場合、k は、多角形の境界上にある一連の点を表すインデックスの列ベクトルになります。

  • 3 次元の場合、k は、mtri3 列の三角形分割の行列になります。mtri は境界上にある三角面の数です。k の各行の点のインデックスで三角形が定義され、それらの三角形をつないで境界の多面体が形成されます。

境界の内部の面積または体積。スカラーとして返されます。

  • 2 次元の場合、v は境界 k の内部の面積になります。

  • 3 次元の場合、v は境界 k の内部の体積になります。

アルゴリズム

boundary は指定した点から alphaShape を構成し、boundaryFacets を使用してどの点が境界上にあるか決定します。

拡張機能

バージョン履歴

R2014b で導入