Main Content

ストリーム粒子のアニメーションの作成

時間経過に対する発射体の経路

この例では、3 次元の Quiver プロットを使用して、時間の関数として発射体の経路を表示する方法を説明します。

速度定数 vz と加速度定数 a を使用して、次の発射体の経路を表します。時間が 0 から 1 に変化するときの高さを z として計算します。

z(t)=vzt+at22

vz = 10; % velocity constant
a = -32; % acceleration constant         
t = 0:.1:1;
z = vz*t + 1/2*a*t.^2;

X 方向と Y 方向の位置を計算します。

vx = 2;
x = vx*t;

vy = 3;
y = vy*t;

速度ベクトルの成分を計算し、3 次元 Quiver プロットを使用してベクトルを表示します。座標軸の視点を [70,18] に変更します。

u = gradient(x);
v = gradient(y);
w = gradient(z);
scale = 0;

figure
quiver3(x,y,z,u,v,w,scale)
view([70,18])

表示できる粒子のアニメーション

ストリーム粒子のアニメーションは、流れの方向とベクトル場の速度を可視化するのに役立ちます。「粒子」(線のマーカー) は、特定の流線の跡を示します。アニメーションで示す各粒子の速度は、流線に沿った任意の点でのベクトル場の大きさに比例します。

1. データの範囲の始点の指定

次の例は、適切な開始位置を指定することによって、プロットするボリューム データの範囲を決めます。この場合は、ストリーム プロットは、z の値が 5 の平面で x の値が 100 の点から始まり、y の値は 20 ~ 50 の範囲になります。これは、ボリューム データ全体には及びません。

load wind
[sx sy sz] = meshgrid(100,20:2:50,5);

2. 粒子の軌跡を示す流線の作成

次の例は、アニメーションに、粒子の軌跡を示す流線 (関数 stream3streamline を使用) を追加します。

verts = stream3(x,y,z,u,v,w,sx,sy,sz);
sl = streamline(verts);

3. 表示の定義

すべての流線は、z=5 の平面で開始されますが、らせんの中にはそれよりも低い値のものがあります。次の設定は、よりはっきりとしたアニメーションの表示を提供します。

  • 選択された視点 (view) は、ほとんどの流線とらせんを含む平面を表示します。

  • データの縦横比 (daspect) を [2 2 0.125] にすると、z 方向の解像度が向上し、らせん内のストリーム粒子が見やすくなります。

  • 座標軸の範囲をデータの範囲と一致するように設定し (axis)、軸のボックスを描画します (box)。

    view(-10.5,18)
    daspect([2 2 0.125])
    axis tight;
    set(gca,'BoxStyle','full','Box','on')
    

4. ストリーム粒子の頂点の計算

粒子を描く流線上の頂点を決めます。関数 interpstreamspeed は、流線の頂点に基づくデータとベクトル データの速度を出力します。この例は、速度 0.05 をスケーリングして、内挿される頂点の数を増やします。

軸の SortMethod プロパティを childorder にすると、アニメーションの実行速度が上がります。

関数 streamparticles は、次のプロパティを設定します。

  • Animate10 に設定して、アニメーションを 10 回実行します。

  • ParticleAlignmenton に設定して、すべての粒子の追跡を同時に開始します。

  • MarkerEdgeColornone に設定して円形のマーカーの面のみを描画します。アニメーションは、通常マーカーのエッジが描画されないときに高速に実行されます。

  • MarkerFaceColorred に。

  • Markero に設定します。これは、円形のマーカーを描画します。その他の選択肢はライン マーカーを参照してください。

    iverts = interpstreamspeed(x,y,z,u,v,w,verts,0.01);
    set(gca,'SortMethod','childorder');
    streamparticles(iverts,15,...
    	'Animate',10,...
    	'ParticleAlignment','on',...
    	'MarkerEdgeColor','none',...
    	'MarkerFaceColor','red',...
    	'Marker','o');