ドキュメンテーション

最新のリリースでは、このページがまだ翻訳されていません。 このページの最新版は英語でご覧になれます。

領域境界のタイプ

凸包と非凸多角形の比較

N 次元空間で、点集合の凸包は集合のすべての点で囲まれた最小の凸領域です。ペグ ボードのペグとして 2 次元の点集合を考える場合、集合の凸包はゴムバンドを使って作成され、それを使ってすべてのペグを囲みます。

x = gallery('uniformdata',20,1,20);
y = gallery('uniformdata',20,1,30);
plot(x,y,'r.','MarkerSize',10)
hold on
k = convhull(x,y);
plot(x(k),y(k))
title('The Convex Hull of a Set of Points')
hold off

凸多角形は、凹の頂点をもたない多角形です。たとえば以下のようになります。

x = gallery('uniformdata',20,1,30);
y = gallery('uniformdata',20,1,40);
k = convhull(x,y);
plot(x(k),y(k))
title('Convex Polygon')

凸でない点集合の境界を作成することもできます。凸包を上から「真空パック」すると、凹の頂点をもつ非凸多角形のすべての点を含めることができます。

k = boundary(x,y,0.9);
plot(x(k),y(k))
title('Nonconvex Polygon')

凸包は、多くの用途があります。集合の凸包から平面内に設定した離散点で指定される領域上の上限を計算することができます。凸包は、より複雑な多角形または多面体の表現を簡単にします。たとえば、2 つの凸でない本体が交差するかどうか確認するため、一連の高速の拒否ステップを適用して、完全交差の解析のペナルティを避けることができます。

  • 各々の本体のまわりの軸の範囲の枠内が交差しているかどうか、確認します。

  • 選択枠が交差している場合、各々の本体の凸包を計算し、包の交差をチェックすることができます。

凸包が交差していない場合、より多くの総合的な交差テストを回避することができます。

凸包と非凸多角形は比較的単純な境界を表す便利な方法ですが、これらは実際にはアルファ形状と呼ばれるより一般的な幾何構造の特定のインスタンスです。

アルファ形状

点集合のアルファ形状は、凸包の "一般化" およびドローネ三角形分割の部分グラフです。つまり、凸包はアルファ形状の 1 つのタイプにすぎず、アルファ形状の全ファミリは指定された点集合のドローネ三角形分割から得ることができます。

x = gallery('uniformdata',20,1,10);
y = gallery('uniformdata',20,1,20);
plot(x,y,'r.','MarkerSize',20)
hold on
shp = alphaShape(x,y,100);
plot(shp)
title('Convex Alpha Shape')
hold off

凸包とは異なり、アルファ形状は詳細レベル、つまり点集合の境界にどれだけ厳密に近似するかを制御するパラメーターがあります。このパラメーターは "アルファ" または "アルファ半径" と呼ばれます。アルファ半径を 0 から Inf に変化させることで、その点集合に固有の一連のアルファ形状が得られます。

plot(x,y,'r.','MarkerSize',20)
hold on
shp = alphaShape(x,y,.5);
plot(shp)
title('Nonconvex Alpha Shape')
hold off

アルファ半径を変化させると、複数の領域をもつアルファ形状が得られることがあります。これには、穴がある場合もない場合もあります。ただし、MATLAB® の関数 alphaShape は常に正規化されたアルファ形状を返すため、孤立した、接続されていない点、エッジ、面の発生は防がれます。

plot(x,y,'r.','MarkerSize',20)
hold on
shp = alphaShape(x,y);
plot(shp)
title('Alpha Shape with Multiple Regions')
hold off

参考

|

関連するトピック