Main Content

このページの翻訳は最新ではありません。ここをクリックして、英語の最新版を参照してください。

collisionMesh

凸メッシュの衝突ジオメトリの作成

説明

collisionMesh を使用して凸メッシュとして衝突ジオメトリを作成します。

作成

説明

MSH = collisionMesh(Vertices) を使用して、3 次元 Vertices のリストから凸メッシュとして衝突ジオメトリを作成します。この頂点は、選択肢の座標系 (衝突ジオメトリ座標系) を基準にして指定されます。既定では、衝突ジオメトリ座標系はワールド座標系と併置されます。

プロパティ

すべて展開する

メッシュの頂点。N 行 3 列の配列として指定します。N は頂点の数です。Vertices の各行は、3 次元空間における点の座標を表します。一部の点は作成された凸メッシュの内側にあることに注意してください。

データ型: double

ワールド座標系を基準とした衝突ジオメトリの姿勢。4 行 4 列の同次行列として指定します。姿勢は、衝突ジオメトリを作成した後に変更できます。

データ型: double

オブジェクト関数

show衝突ジオメトリの表示

すべて折りたたむ

単位球面でランダムに選択された 10 個の点の座標で構成されている配列を作成します。再現性を得るため、乱数シードを既定値に設定します。

rng default
n = 10;
pts = zeros(n,3);
for k = 1:n
    ph = 2*pi*rand(1);
    th = pi*rand(1);
    pts(k,:) = [cos(th)*sin(ph) sin(th)*sin(ph) cos(ph)];
end

配列から凸メッシュ衝突ジオメトリを作成します。衝突ジオメトリを可視化します。

m = collisionMesh(pts);
show(m)

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

最初の配列と類似している 2 つ目の配列を作成しますが、今回は単位球面でランダムに選択された 1000 個の点で構成されています。

n = 1000;
pts2 = zeros(n,3);
for k = 1:n
    ph = 2*pi*rand(1);
    th = pi*rand(1);
    pts2(k,:) = [cos(th)*sin(ph) sin(th)*sin(ph) cos(ph)];
end

配列からメッシュ衝突ジオメトリを作成して可視化します。球面でさらに多くの点を選択すると、球面のようなメッシュが得られるかどうか観察します。

m2 = collisionMesh(pts2);
show(m2)

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

立方体の 8 つの頂点の座標で構成されている配列を作成します。立方体は原点を中心とし、辺の長さは 4 です。

cubeCorners = [-2 -2 -2 ; -2 2 -2 ; 2 -2 -2 ; 2 2 -2 ;...
    -2 -2 2 ; -2 2 2 ; 2 -2 2 ; 2 2 2]
cubeCorners = 8×3

    -2    -2    -2
    -2     2    -2
     2    -2    -2
     2     2    -2
    -2    -2     2
    -2     2     2
     2    -2     2
     2     2     2

cubeCornerspts2 に追加します。新しい配列からメッシュ衝突ジオメトリを作成して可視化します。立方体には球面が含まれるため、立方体の内側にある球面の点はジオメトリの作成時に無視されます。

pts3 = [pts2;cubeCorners];
m3 = collisionMesh(pts3);
show(m3)

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

拡張機能

C/C++ コード生成
MATLAB® Coder™ を使用して C および C++ コードを生成します。

バージョン履歴

R2019b で導入