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

isosurface

物体データから等値面データを抽出

構文

fv = isosurface(X,Y,Z,V,isovalue)
fv = isosurface(V,isovalue)
fvc = isosurface(...,colors)
fv = isosurface(...,'noshare')
fv = isosurface(...,'verbose')
[f,v] = isosurface(...)
[f,v,c] = isosurface(...)
isosurface(...)

説明

fv = isosurface(X,Y,Z,V,isovalue) は、物体データ V から、isovalue で指定した等値面値の平面データを計算します。つまり、関数 isosurface は、等高線が同じ標高の点を連結するように、指定された値をもつ点を接続します。

配列 XYZ は、直交軸の範囲グリッドを表します。V には、これらのグリッド点の対応する値が含まれます。座標配列 (XY および Z) は単調で、meshgrid によって生成された形式に従っていなければなりません。V は、XY および Z と同じサイズの 3 次元ボリューム配列でなければなりません。

struct fv は、等値面の面と頂点を含んでいて、patch コマンドに直接渡すことができます。

fv = isosurface(V,isovalue) は、配列 XYZ が、[m,n,p] = size(V) である [X,Y,Z] = meshgrid(1:n,1:m,1:p) として定義されていることを前提としています。

fvc = isosurface(...,colors) は、配列 colors をスカラー場に内挿し、内挿された値を構造体 fvc のフィールド facevertexcdata に返します。配列 colors のサイズは、V のサイズと同じでなければなりません。colors 引数は、等値面を計算するために使用するものと異なるデータをもつ等値面 (たとえば、温度データを風向の等値面上に重ね書きする) のカラー マッピングを制御できます。

fv = isosurface(...,'noshare') は、共有する頂点を作成しません。そのため、高速で計算できますが、非常に大きな集合を作成します。

fv = isosurface(...,'verbose') は、計算の進行状況に応じて、コマンド ウィンドウにその状況を表すメッセージを表示します。

[f,v] = isosurface(...) または [f,v,c] = isosurface(...) は、struct ではなく別々の配列で面と頂点 (および faceVertexcCData) を返します。

出力引数なしの isosurface(...) は、算出した面と頂点を使用して現在の座標軸にパッチを作成します。現在の座標軸がない場合は、3 次元のビューを使用して新しい座標軸が作成されます。

特殊なケースの動作 — 出力引数なしで呼び出された関数 isosurface

現在の座標軸がなく、出力引数を割り当てずに関数 isosurface を呼び出すと、MATLAB® は座標軸を新規作成し、3 次元ビューに設定して、isosurface グラフにライティングを追加します。

ライティングを使用した等値面の描画

flow データセットを読み込みます。このデータセットは無限大のタンク内での水中ジェットの速度プロファイルを表しています。データ値 -3 で等値面を描画し、次の手順でライティング用に等値面を準備します。

  • ボリューム データを基に等値面法線を再計算します。

  • フェースとエッジのカラーを設定します。

  • 視点を設定します。

  • ライティングを付加します。

[x,y,z,v] = flow;
p = patch(isosurface(x,y,z,v,-3));
isonormals(x,y,z,v,p)
p.FaceColor = 'red';
p.EdgeColor = 'none';
daspect([1 1 1])
view(3); 
axis tight
camlight 
lighting gouraud

等値面カラーの設定

フロー データを可視化しますが、表面をカラーコード化し、x 軸に沿った大きさを示します。6 番目の引数を関数 isosurface に使用します。これは、結果の等値面をカラー化することで、別のデータセットをオーバーレイする方法を提供します。colors 変数は、isosurface の各頂点のスカラー値を含むベクトルで、現在のカラー マップで表現されます。この場合、Surface を定義する変数の 1 つですが、完全に独立することがあります。現在の Figure のカラー マップを変更すると、別のカラー スキームを適用できます。

[x,y,z,v] = flow; 
[faces,verts,colors] = isosurface(x,y,z,v,-3,x); 
patch('Vertices',verts,'Faces',faces,'FaceVertexCData',colors,...
    'FaceColor','interp','EdgeColor','interp')
view(30,-15)
axis vis3d
colormap copper

ヒント

関数 isosurface により作成された fv 構造体を直接 patch コマンドに転送することができます。しかし、プロパティ名を設定しないと、各面と頂点の配列 (f, v) を patch に直接渡すことができません。以下に例を示します。

patch(isosurface(X,Y,Z,V,isovalue))

または

[f,v] = isosurface(X,Y,Z,V,isovalue);
patch('Faces',f,'Vertices',v)

拡張機能

R2006a より前に導入