Main Content

isosurface

ボリューム データから等値面データを抽出

説明

等値面は、3 次元データ分布で等しい値をもつ点の 3 次元表面による表現です。関数 isosurface は、空間のボリューム内の定数値を持つ点を連結することで表面を計算して描画します。

等値面をプロット

isosurface(X,Y,Z,V,isovalue) は、指定された isovalue と等しいデータをボリューム データ V から特定し、現在の座標軸に isosurface をプロットします。

等値面データを構造体として計算

s = isosurface(X,Y,Z,V,isovalue) は、指定された isovalue と等しいデータをボリューム データ V から特定し、結果として得られる表面の面と頂点のデータを構造体で返します。

s = isosurface(X,Y,Z,V) は、データのヒストグラムを使用して等値を選択します。

s = isosurface(V,isovalue) は、V のサイズに基づいて XY、および Z の座標を使用します。各次元の座標は 1 から始まり、m×n×p のグリッドを構成します。ここで [m,n,p] = size(V) です。

s = isosurface(V) は、データのヒストグラムを使用して等値を選択します。

s = isosurface(___,colors) は、配列 colors をスカラー場に内挿し、データを構造体のフィールド facevertexcdata に格納します。

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

s = isosurface(___,'noshare') は、共有する頂点を作成しません。この構文はより高速に実行されますが、結果として得られる頂点のリストが大幅に長くなる場合があります。頂点の処理やプロットを行う後続の操作が遅くなる可能性があります。

等値面データを配列として計算

[faces,verts] = isosurface(___) は、面と頂点を別々の配列で返します。

[faces,verts,colors] = isosurface(___) は、面、頂点、および色のデータを別々の配列で返します。

すべて折りたたむ

meshgrid を使用して 3 次元グリッド座標を作成し、ボリューム データ V を作成します。その後、ボリューム内の値 .0001 の点を連結して等値面を作成します。等値面をプロットします。

[x,y,z] = meshgrid([-3:0.25:3]); 
V = x.*exp(-x.^2 -y.^2 -z.^2);
isosurface(x,y,z,V,1e-4);

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

等値が 0.0001 の等値面を作成します。結果として得られる表面の面と頂点の位置を構造体で返します。

[x,y,z] = meshgrid([-3:0.25:3]); 
V = x.*exp(-x.^2 -y.^2 -z.^2);
s = isosurface(x,y,z,V,1e-4)
s = struct with fields:
    vertices: [1693x3 double]
       faces: [3348x3 double]

等値が .0001 の等値面を作成します。結果として得られる表面の面と頂点の位置を別々の配列で返します。

[x,y,z] = meshgrid([-3:0.25:3]); 
V = x.*exp(-x.^2 -y.^2 -z.^2);
[faces,verts] = isosurface(x,y,z,V,1e-4)
faces = 3348×3

     1     2     3
     1     4     2
     2     4     5
     4     6     5
     5     6     7
     6     8     7
     9    10    11
     9    12    10
    10    12    13
    12    14    13
      ⋮

verts = 1693×3

    0.2500   -0.2500   -2.7918
    0.2181   -0.2500   -2.7500
    0.2500   -0.4366   -2.7500
    0.2500         0   -2.8092
    0.2049         0   -2.7500
    0.2500    0.2500   -2.7918
    0.2181    0.2500   -2.7500
    0.2500    0.4366   -2.7500
    0.5000   -0.7500   -2.7935
    0.4165   -0.7500   -2.7500
      ⋮

等値が 0.0001 の等値面を作成します。面と頂点の位置を構造体として計算します。その後、構造体データを関数 patch に渡して面と頂点のデータをプロットします。プロットの表示を調整し、表面の色を変更し、カスタムのライティングを指定します。

[x,y,z] = meshgrid([-3:0.25:3]); 
V = x.*exp(-x.^2 -y.^2 -z.^2);
s = isosurface(x,y,z,V,1e-4);
p = patch(s);
isonormals(x,y,z,V,p)
view(3);
set(p,'FaceColor',[0.5 1 0.5]);  
set(p,'EdgeColor','none');
camlight;
lighting gouraud;

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

フロー データを可視化しますが、表面をカラー コード化し、x 軸に沿った大きさを示します。最初に、等値面の各頂点のスカラー値を含むベクトルを指定してカラー データを計算します。カラーは現在のカラーマップにマッピングされます。

[x,y,z] = meshgrid([-3:0.25:3]); 
V = x.*exp(-x.^2 -y.^2 -z.^2);
[faces,verts,colors] = isosurface(x,y,z,V,1e-4,x);

その後、計算したカラー データを関数 patch に渡して、そのデータで等値面をプロットします。カメラの角度と縦横比を設定し、カラーマップを変更します。

patch('Vertices',verts,'Faces',faces,'FaceVertexCData',colors,...
    'FaceColor','interp','EdgeColor','interp')
view(3) 
colormap copper

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

入力引数

すべて折りたたむ

x 軸座標のデータ。ベクトルまたは V と同じサイズの 3 次元配列として指定します。3 次元配列を指定する場合、関数 meshgrid で生成されるものと同様に、単調かつ直交空間でなければなりません

データ型: single | double

y 軸座標のデータ。ベクトルまたは V と同じサイズの 3 次元配列として指定します。3 次元配列を指定する場合、関数 meshgrid で生成されるものと同様に、単調かつ直交空間でなければなりません

データ型: single | double

z 軸座標のデータ。ベクトルまたは V と同じサイズの 3 次元配列として指定します。3 次元配列を指定する場合、関数 meshgrid で生成されるものと同様に、単調かつ直交空間でなければなりません

データ型: single | double

ボリューム データ。XY、および Z と同じサイズの 3 次元配列として指定します。

データ型: single | double

表面を計算する等値。スカラーとして指定します。

データ型: single | double

カラー データ。ベクトルまたは V と同じサイズの 3 次元配列として指定します。この引数は、isosurface の計算に使用するものとは異なるデータで isosurface のカラー マッピングを制御する場合に使用します。この引数は、結果の isosurface をカラーリングすることで別のデータ セットをオーバーレイします。isosurface の各頂点のスカラー値がベクトルまたは配列に格納され、現在のカラーマップを使用してマッピングされます。

関数 colormap を使用してカラー スキームをカスタマイズできます。このカスタマイズでは、表面とカラーマップ間の関係を制御する配列の値を変更する必要があります。インデックス配列でプロット内の特定の場所とカラーマップ内の色が関連付けられます。既定では、C の中間の値はカラーマップの中間の行に線形にマッピングされます。

データ型: single | double

出力引数

すべて折りたたむ

等値面データ。対応する面と頂点のデータを格納する facesvertices のフィールドで構成される構造体として返されます。

データ型: single | double

計算された等値面の面データ。配列として返されます。

データ型: single | double

計算された等値面の頂点データ。配列として返されます。

データ型: single | double

計算された等値面のカラー データ。各頂点の内挿された色のデータのスカラー値を含む配列として返されます。値は現在のカラーマップで表現されます。配列 colors のサイズは、V のサイズと同じでなければなりません。

データ型: single | double

ヒント

  • カスタムのカメラ ビュー、ライティング、または表面の別のカラーマップを指定する場合は、isosurface から返されるデータを関数 patch を使用してプロットします。isosurface で作成された構造体を patch コマンドに直接渡すことができます。以下に例を示します。

    s = isosurface(X,Y,Z,V,isovalue);
    patch(s)
  • あるいは、プロパティ名を指定して面と頂点の配列を patch に個別に渡すことができます。以下に例を示します。

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

拡張機能

バージョン履歴

R2006a より前に導入