可視化手法 | ![]() ![]() |
例題 - 流体のフローデータのスライス化
この例題は、flow
M-ファイルを使って作成した物体をスライスするものです。
1. データの調査
[x,y,z,v] = flow;
座標データの最小値と最大値を検出して、物体の範囲を決定します。
xmin = min(x(:)); ymin = min(y(:)); zmin = min(z(:)); xmax = max(x(:)); ymax = max(y(:)); zmax = max(z(:));
2. X軸に対してある角度でスライス平面を作成
axes平面にないスライス平面を作成するには、まず、サーフェスを定義し希望する方向へ回転させます。この例題は、物体と同じx座標とy座標をもつサーフェスを使います。
hslice = surf(linspace(xmin,xmax,100),... linspace(ymin,ymax,100),... zeros(100));
x軸に関して、-45度サーフェスを回転させ、スライス平面を定義するためにサーフェスの XData
, YData
, ZData
を保存し、その後サーフェスを削除します。
rotate(hslice,[-1,0,0],-45) xd = get(hslice,'XData'); yd = get(hslice,'YData'); zd = get(hslice,'ZData'); delete(hslice)
3. スライス平面の描画
回転したスライス平面を描画するために、FaceColor
を interp
に設定して、figureカラーマップにより色分けし、EdgeColor
を none
に設定します。DiffuseStrength
を .8
に設定して、光源を加えた後、より明るくします。
h = slice(x,y,z,v,xd,yd,zd); set(h,'FaceColor','interp',... 'EdgeColor','none',... 'DiffuseStrength',.8)
hold
をonに設定し、xmax
, ymax
, zmin
で、3つの直交スライス平面を付加し、ある角度で物体をスライスする最初の平面に対する内容を与えます。
hold on hx = slice(x,y,z,v,xmax,[],[]); set(hx,'FaceColor','interp','EdgeColor','none') hy = slice(x,y,z,v,[],ymax,[]); set(hy,'FaceColor','interp','EdgeColor','none') hz = slice(x,y,z,v,[],[],zmin); set(hz,'FaceColor','interp','EdgeColor','none')
4. ビューの定義
正しい割合で物体を表示するため、データの縦横比を [1,1,1]
(daspect
) に設定します。軸を物体の周りに厳密に合わせて(axis
)、box
を使って3次元オブジェクトを表示します。軸の方向は、最適な view
を決定するために rotate3d
を使って最初に選択することができます。
ある部分を拡大すると、物体をより大きく表示します(camzoom
)。 遠近法を選択して、デフォルトの正射影よりも、より自然な直方体の物体を与えます(camproj
)。
daspect([1,1,1]) axis tight box on view(-38.5,16) camzoom(1.4) camproj perspective
5. 光源の付加とカラーの指定
光源を付加することは、4つのスライス平面はそれぞれ光源との角度が異なるので、それらの平面間の境界をよりはっきりさせます(lightangle
)。24色のみでカラーマップを選択すると(デフォルトは64色)、物体内の変化を示す手助けとなる可視的な勾配を作成することができます。
lightangle(-45,45) colormap (jet(24)) set(gcf,'Renderer','zbuffer')
![]() | スライス平面を使って物体を表示 | カラーマッピングの変更 | ![]() |