2016-03-23 121 views
0

私はMatlab上の2Dでいくつかの粒子の軌跡をシミュレートしようとしています。私は時間の関数としてこれらの粒子のx座標とy座標を持っています。これは行列xとyとして保存します。 xとyの両方の列は時間に対応し、行はパーティクル番号に対応します:1,2など複数の点を同時にMatlabアニメーション

私は一時停止して1つのパーティクルのアニメーションを行う方法を知っていますが、複数のパーティクルの軌跡のコードをカスタマイズすることができます。基本的に私の考えは、最初のプロットでは、パーティクルA、B、Cなどの粒子の初期位置に対応する3つのマーカーがあることです。次に、これらの3つのマーカーの動きに従いたいと思います。私は問題に遭遇しました。私は、パーティクルアイデンティティに従って後続のポイントをどのようにソートするのか分かりません。たとえば、2番目の時点の最初の点をパーティクルA、2番目の点をパーティクルB、3番目の点をパーティクルCに指定します。

私はこのようなことをしましたが、私のシミュレーションでは、

y = rand(3, 20); % Generate random sample data. 
x = rand(size(y, 1), size(y, 2)); 
% Now we have x and y sample data and we can begin. 
% Extract into separate arrays 
x1 = sort(x(1,:)); 
x2 = sort(x(2,:)); 
x3 = sort(x(3,:)); 
y1 = y(1,:); 
y2 = y(2,:); 
y3 = y(3,:); 
for k = 1 : length(x1) 
    plot(x1(1:k), y1(1:k), 'r*-', 'LineWidth', 2); 
    xlim([min(x(:)), max(x(:))]); 
    ylim([min(y(:)), max(y(:))]); 
    grid on; 
    hold on; 
    plot(x2(1:k), y2(1:k), 'g*-', 'LineWidth', 2); 
    plot(x3(1:k), y3(1:k), 'b*-', 'LineWidth', 2); 
    hold off; 
    fprintf('Plotted points 1 through %d\n', k); 
    pause(0.8); 
end 

任意のアイデアや提案:粒子の数は、仕事へのアニメーションのためのX1を作成することが非現実的になり100、X2、...、X100、Y1、Y2、...、Y100かもしれ大いに感謝されます!

+0

これを見てください[answer](http://stackoverflow.com/questions/31781277/how-can-i-visualize-the-tracking-of-every-nero-zero-elements-in-a- 2d-matrix/31784703#31784703)には、複数の点を同時にアニメーション化する方法の例が含まれています。 – Hoki

答えて

0

すべてのグラフを一度にプロットするために、2D配列を作成することがあります。

以下は例です。

y = rand(3, 20); % Generate random sample data. 
x = rand(size(y, 1), size(y, 2)); 
% Now we have x and y sample data and we can begin. 
% Extract into separate arrays 
x = sort(x'); 
y=y'; 

M=size(x); 
N=M(2); 

for k = 1 : length(x) 
    if k==1; 

     zeroPad=zeros(1,N); 
     x0=[zeroPad;x(1,1:N)]; 
     y0=[zeroPad;y(1,1:N)]; 
     plot(x0(1:2,1:N), y0(1:2,1:N), '*', 'LineWidth', 2); 

    else 
     plot(x(1:k,1:N), y(1:k,1:N), '*-', 'LineWidth', 2); 

    end 
    xlim([min(x(:)), max(x(:))]); 
    ylim([min(y(:)), max(y(:))]); 

    grid on; 
    fprintf('Plotted points 1 through %d\n', k); 
    pause(0.8); 
end 

トリックを1つ追加しました。

最初の繰り返しで、xとyの前にゼロを追加しました。

不要なコードが削除されました。

+0

ありがとう!しかし、小さな問題:最初のフレームのすべての最初の点を結ぶ線があるようです。この行を取り除く方法はありますか? – user6101792

関連する問題