このページの翻訳は最新ではありません。ここをクリックして、英語の最新版を参照してください。
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 は、等高線が同じ標高の点を連結するように、指定された値をもつ点を接続します。
配列X
、Y
、Z
は、直交軸の範囲グリッドを表します。V
には、これらのグリッド点の対応する値が含まれます。座標配列 (X
、Y
およびZ
) は単調で、meshgrid
によって生成された形式に従っていなければなりません。V
は、X
、Y
およびZ
と同じサイズの 3 次元ボリューム配列でなければなりません。
struct
fv
は、等値面の面と頂点を含んでいて、patch
コマンドに直接渡すことができます。
fv = isosurface(V,isovalue)
は、配列X
、Y
、Z
が、[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); axistightcamlight lightinggouraud
等値面カラーの設定
フロー データを可視化しますが、表面をカラーコード化し、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) axisvis3dcolormapcopper
ヒント
関数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)