2011-12-25 10 views
0

アニメーションを作成するコードを記述しました(satellite movement around the Earth)。私はそれを実行すると、それは正常に動作します。しかし、MatlabのGUIにはるかに複雑なコードの一部になるように変更された場合、結果は変化しました(主にプロットするポイントの数が増えたためです)。 OpenGLレンダラーを使用すると、他のレンダラー(PaintersとZbuffer)が使用されている場合よりも、衛星の動きが速いことにも気付きました。私は、衛星運動のレンダリングの改善を達成するためのさらなる可能性があるかどうかはわかりません。私はMatlabのアニメーションレンダリングを改善しました

handles.tray = zeros(1,Fin); 
handles.psat = line('parent',ah4,'XData',Y(1,1), 'YData',Y(1,2),... 
    'ZData',Y(1,3),'Marker','o', 'MarkerSize',10,'MarkerFaceColor','b'); 
... 
while (k<Fin) 
      az = az + 0.01745329252; 
      set(hgrot,'Matrix',makehgtform('zrotate',az)); 
      handles.tray(k) = line([Y(k-1,1) Y(k,1)],[Y(k-1,2) Y(k,2)],... 
       [Y(k-1,3) Y(k,3)],... 
     'Color','red','LineWidth',3); 
      set(handles.psat,'XData',Y(k,1),'YData',Y(k,2),'ZData',Y(k,3)); 
      pause(0.02); 
      k = k + 1; 

      if (state == 1) 
       state = 0; 
       break; 
      end 
      end 
... 

答えて

1

あなたは回転変換を適用することを検討しなかった(handles.tray)キーは、時​​間に沿って衛星(handles.psat)の実際の位置を作成するコードとその軌道を変え、おそらく、だと思いますあなたのデータの軸の代わりに行列?
私は考える< あなたのコードをスピードアップできることを確認しましたが、です。

1

フレームを事前に計算して、XDataYDataを設定してレンダリングするのではなく、スピードを上げるために使用する典型的な技を使用しました。しかし、ここではさらにいくつかのヒントを紹介します:

1)私があなたの説明で気づいたことは、異なるレンダラーと複雑さが異なるため、アニメーションの実行速度が変わったことです。これはしばしば望ましくないことです。 pause(0.2)を使用して安定したフレームレートを生成するのではなく、フレーム間の実際の間隔(つまり、tic; dt = tocを使用)を使用して、アニメーションをどれだけ進めるかを計算することを検討してください。

2)複雑さがフレームレートが望ましくないほど低い場合は、pause(0.02)drawnowに置き換えるか、少なくとも各フレームで一時停止する時間を計算してください。

3)さまざまなステップの所要時間を測定してボトルネックの原因をさらに絞り込んでください。これにより、操作の適切な段階を最適化することができます。

関連する問題