簡體   English   中英

如何在 MatLAB 上更快地制作此動畫

[英]How can I make this animation faster on MatLAB

這是代碼。 我需要幫助使動畫更快。

編寫代碼使球在牆壁之間來回彈跳。 球以 cos2 (𝜃) 的形式彈跳,其中 θ 從 0° 到 360°,長度為 1000。

球的高度距離中心 28 英寸。

兩堵牆之間的距離為 30 英寸。

球的半徑是 1 英寸

球會來回彈跳 20 次

代碼塊:

   r = 1; 

   hmax = 28; 
   n = 1000;
   h = linspace(0,hmax,n);
   t = linspace(0,360,n);
   k = 0;

  pt = 1/6000;

  x = zeros(length(h),length(t));
  vx = x;
  y = x;
  vy = y;
  a = r+h;
  b = r+hmax/2*(cosd(t).^2)+hmax/2;
  for i = 1:n
      x(i,:) = a(i)+r.*cosd(t);
      y(i,:) = b(i)+r.*sind(t);
      vx(i,:) = r+r.*cosd(t);
      vy(i,:) = r+h.*sind(t);
  end

  figure(3)
  ball_bounce1= plot(x(1:500:end),y(1:500:end),'c','linewidth',3);
  axis([-1 31 -1 31])

  grid on 
  while k < 10 
      if rem(k,2) == 0 
         for i = 1:n
             set(ball_bounce1,'XData',x(i,:),'YData',y(i,:));
             pause(pt)
         end
      end
  if k > 10 
     break
  end
 end

減少球的頂點數。 您正在繪制 1000 段來繪制圓,16 或 32 段就足夠了。 為此,您需要xy矩陣應為m by n ,其中m是時間片的數量, n是段的數量。

第一步是定義兩個h和兩個t向量, h1t1具有m元素, h2t2具有n元素。 這樣做之后,動畫在這里運行得非常流暢。

作為旁注,我認為您的運動建模是錯誤的。 代碼中的球像上圖一樣移動,我相信它應該像下圖一樣移動: 在此處輸入圖片說明

*一些可能有用的東西:

您可能感興趣也可能不感興趣的是使用帶有代表球的標記的動畫線。 此腳本遵循余弦路徑的絕對值abs() 余弦頻率也可以通過改變線內的2*pi來調整:

y = Amplitude.*abs(cos(linspace(0,2*pi,Number_Of_Samples))) + Ball_Offset;

此腳本使用drawnow繪制由addpoints()函數排隊/添加的新點。

球運動的 GIF(在 MATLAB 中更流暢):

球運動的GIF

腳本:

clf;
Animated_Plot = animatedline('MaximumNumPoints',1,'Marker','o','MarkerSize',10);

Amplitude = 28;
Wall_Distance = 30;
Number_Of_Samples = 500;
Ball_Offset = 0.4;

axis([0 Wall_Distance 0 Amplitude+0.2*Amplitude]);
xlabel("Position Between Wall 0 and Wall 30"); ylabel("Amplitude");
title("Ball Movement");

x = linspace(0,Wall_Distance,Number_Of_Samples);
y = Amplitude.*abs(cos(linspace(0,2*pi,Number_Of_Samples))) + Ball_Offset;

%Mirroring and repeating%
x = [x flip(x)];
y = [y flip(y)];

x = repmat(x,1,20);
y = repmat(y,1,20);

for Point = 1: length(x)
    addpoints(Animated_Plot, x(Point), y(Point));
    drawnow
end

使用 MATLAB R2019b 運行

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM