Main Content

ベクトル ボリューム データの可視化

ライン、粒子、リボン、ストリーム、チューブ、コーン

ベクトル ボリューム データは、データセットの各座標点がそれに関連する 3 つの値をもつので、スカラー データよりも多くの情報をもっています。これらの値は、大きさと方向を表すベクトルを定義します。流体の流れの速度は、ベクトル データの一例です。

ベクトル データの可視化に有用な多くの手法があります。

  • 流線は、ベクトル場に存在する質量のない粒子の動きを追跡したものです。

  • ストリーム粒子は、流線を追跡するマーカーで、流線のアニメーションの作成に役立ちます。

  • ストリーム リボンは、流線に似ていますが、リボンの幅がねじれを表すことが可能である点が異なります。ストリーム リボンは、回転角速度を表すのに役立ちます。

  • ストリーム チューブは、流線に似ていますが、チューブの幅をコントロールすることができます。ストリーム チューブは、ベクトル場の発散の表示に役立ちます。

  • コーン プロットは、矢印または円錐の矢印を表示して、各点におけるデータの大きさと方向を表します。

これらの関数は、等高線、スライス平面、等値面のような他の可視化手法と共に使用すると、適切にデータを解析します。この節の例は、これらの手法を説明します。

スカラー手法をベクトル データに適用する

等高線スライス、スライス平面、等値面のような可視化手法は、スカラー ボリューム データを必要とします。これらの手法は、ベクトルの大きさを取り出すことでベクトル データに適用することができます。たとえば、wind データセットは 3 つの座標配列と 3 つのベクトル要素配列 uvw を出力します。この場合、速度ベクトルの大きさはボリューム データ内の各対応する座標点での風速と等価です。

wind_speed = sqrt(u.^2 + v.^2 + w.^2);

配列 wind_speed は、ボリューム データに対するスカラー値を含んでいます。ただし、このアプローチにより生じる情報の有効性は、ユーザーのベクトル データの大きさによって表される物理現象により異なります。

ストリーム プロットの開始位置の指定

ストリーム プロット (流線、リボン、チューブ、コーン、矢印) は、3 次元ベクトル場の流れを示します。MATLAB® のストリーム プロットの関数 (streamlinestreamribbonstreamtubeconeplotstream2stream3) は、すべてのストリームの追跡を開始する点を指定しなければなりません。

開始位置の決定

一般に、データの特性を知っていると開始位置の選択に役立ちます。初期の流れの方向やデータの座標の範囲のような情報は、データを評価する点を決める手助けになります。

関数 streamslice は、データを調査する場合に有用です。たとえば、次のステートメントは、ベクトル場を、その範囲の中間の値 z で切り通すスライスを作成します。

load wind
zmax = max(z(:)); zmin = min(z(:));
streamslice(x,y,z,u,v,w,[],[],(zmax-zmin)/2)

この流線のスライス プロットは、流れが正の x 方向であることを示します。始点は、xy の両方で指定できます。x-z 平面または y-z 平面においてボリューム データをスライスする同様のプロットを作成して、データの範囲と方向についてより詳細に調べることができます。

開始位置座標の配列の指定

1 つの流線に対して開始位置を指定するには、xyz 座標が必要です。meshgrid コマンドは、開始位置の配列を作成するための便利な方法を提供します。たとえば、前のストリーム スライスに表示された風のデータから以下の開始位置を選択します。

[sx,sy,sz] = meshgrid(80,20:10:50,0:5:15);

次のステートメントは、x = 80、y は 20 から 50、z は 0 から 15 である開始位置を定義します。plot3 を使用して位置を表示することができます。

plot3(sx(:),sy(:),sz(:),'*r');
axis(volumebounds(x,y,z,u,v,w))
grid on 
set(gca,'BoxStyle','full','Box','on')
daspect([2 2 1])

meshgrid により出力されるような 3 次元配列を使用する必要はありませんが、各配列のサイズは同一でなければなりません。meshgrid は各座標において同数の固有な値をもたない場合に配列を生成するための便利な方法を提供します。開始位置の配列を列ベクトルとして定義することもできます。たとえば、関数 meshgrid は 3 次元配列を出力します。

[sx,sy,sz] = meshgrid(80,20:10:50,0:5:15);
whos
  Name      Size             Bytes  Class     Attributes

  sx        4x1x4              128  double              
  sy        4x1x4              128  double              
  sz        4x1x4              128  double      

さらに、3 つの配列の対応する要素が各開始位置の座標を構成する 16 行 1 列の列ベクトルを使用することができます(これは meshgrid により、sx(:)sy(:)sz(:) として出力される値のインデックス付けと等価です)。

たとえば、流線を開始点に追加すると以下のようになります。

streamline(x,y,z,u,v,w,sx(:),sy(:),sz(:))

ボリューム データの部分領域へのアクセス

関数 subvolume は、ボリューム データセットの部分領域にアクセスするための簡単な方法を提供します。subvolume を使用することにより、コロン演算子 を使用して物体を定義する 3 次元配列にインデックスを付けるのではなく、範囲を基に関心領域を選択することができます。ボリューム データの一部に対するデータを作成するために、次の 2 つの方法、コロン演算子によるインデックス付けと、subvolume の使用について考えます。

コロン演算子によるインデックス付け

配列にインデックスを付ける場合、配列の各次元の要素を指定する値を操作します。

load wind
xsub = x(1:10,20:30,1:7);
ysub = y(1:10,20:30,1:7);
zsub = z(1:10,20:30,1:7);
usub = u(1:10,20:30,1:7);
vsub = v(1:10,20:30,1:7);
wsub = w(1:10,20:30,1:7);

関数 subvolume の使用方法

subvolume を使用して、座標軸から読み取り可能な座標の値を使用することができます。以下に例を示します。

lims = [100.64 116.67 17.25 28.75 -0.02 6.86];
[xsub,ysub,zsub,usub,vsub,wsub] = subvolume(x,y,z,u,v,w,lims);

ベクトル ボリューム データを必要とする関数に、入力としてボリューム データの一部のデータを使用することができます。