2011-12-25 75 views
0

我寫了一個代碼來創建動畫(satellite movement around the Earth)。當我運行它時,它工作正常。然而,當它被修改爲Matlab GUI中更復雜的代碼的一部分時,結果產生變化(主要是因爲要繪製更多的點)。我也注意到,如果使用OpenGL渲染器,衛星的移動比使用其他渲染器(Painters和Zbuffer)時更快。我不知道是否有進一步的可能性來改善衛星運動的呈現。我認爲關鍵是,也許,更改創建衛星(handles.psat)的實際位置的代碼和它的軌跡沿着時間(handles.tray)在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

你有沒有考慮到應用旋轉變換矩陣在你的數據而不是軸?
我認爲< 雖然我沒有檢查它>它可以加速你的代碼。

1

您已經使用了我用來加快速度的典型技巧,如預先計算幀,設置XDataYData而不是重新繪製,然後選擇渲染器。這裏有一些更多的技巧,但:

1)我注意到你的描述中有一件事是不同的渲染器和不同的複雜性改變了你的動畫看起來運行的速度。這通常是不可取的。考慮使用幀之間的實際間隔(即使用tic; dt = toc)來計算提前動畫的距離,而不是依靠pause(0.2)來生成穩定的幀速率。 2)如果複雜度使得你的幀速率低得不合要求,考慮用drawnow代替pause(0.02),或者至少計算在每一幀上暫停的時間。

3)嘗試通過測量各個步驟需要多長時間來進一步縮小瓶頸的來源。這將讓您優化操作的正確階段。