[英]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
*一些可能有用的東西:
您可能感興趣也可能不感興趣的是使用帶有代表球的標記的動畫線。 此腳本遵循余弦路徑的絕對值abs()
。 余弦頻率也可以通過改變線內的2*pi
來調整:
y = Amplitude.*abs(cos(linspace(0,2*pi,Number_Of_Samples))) + Ball_Offset;
此腳本使用drawnow
繪制由addpoints()
函數排隊/添加的新點。
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.