2017-02-26 70 views
1
count = 1;        
R_Ball = 2; 
initpos.x = 0; 
initpos.y = 2.4; 
initvel.x = 2; 
initvel.y = 4; 
gravity.x = 0; 
gravity.y = 9.81; 
restitution = 0.7; 
GroundBall_friction = 0.2; 
dt = 0.001; 
pos.x = initpos.x; % initial position 
pos.y = initpos.y; % initial position 
vel.x = initvel.x; % initial velocity-x 
vel.y = initvel.y; % initial velocity-y 
t_arc = linspace(0,(2*vel.y)/gravity.y,2000); 
for k = 1:2000 

%Updating the ball's position 
vel.x = vel.x; 
vel.y = vel.y - gravity.y*t_arc(k); 
pos.x = pos.x + vel.x*t_arc(k); 
pos.y = pos.y + vel.y*t_arc(k) - (1/2)*gravity.y*(t_arc(k).^2); 
if vel.y < 0 && pos.y < 0 
vel.y = (-1)*(restitution)*vel.y; 
vel.x = vel.x + GroundBall_friction*(restitution - 1)*vel.x; 
end 
pos.y = max(0, pos.y); 
clf; 
subplot(2,1,1) 
hold on 
line([0 30],[0 0]); 
rectangle('position', [pos.x pos.y R_Ball R_Ball],'Curvature',[1 1],'FaceColor','r'); 
posyy(count) = pos.y; 
plot(posxx + 1/2*R_Ball, posyy + 1/2*R_Ball,'b'); 
axis([0 30 0 10]); 
hold off 
subplot(2,1,2) 
hold on 
velyy(count) = vel.y; 
velxx(count) = vel.x; 
plot(posxx,velxx,'r','LineWidth',2); 
plot(posxx,velyy,'b','LineWidth',2); 
count = count+1; 
legend('Velocity.X','Velocity.Y'); 
hold off 
axis([0 30 -10 10]); 
%Refresh rate 
pause(dt) 
end 
% save video as .mp4; 
myVideo = VideoWriter('Boucing_Ball','mpeg-4'); 
myVideo.FrameRate = 60; % frames per second 
open(myVideo); 
writeVideo(myVideo,); 
close(myVideo); 

我对如何解决此问题稍有意识。我想导出这个动画并使用MP4格式的VideoWriter功能保存它。但我是新手写动画,所以任何帮助表示赞赏。将动画导出并保存为视频文件

回答

0

,因为它提供了以下错误的代码:

Undefined function or variable 'posxx'

您应该添加以下代码(第18行之前):posxx=0;

在这个线程Approaches to create a video in matlab你可以得到如何的信息使用writeVideo创建视频。您应该获取当前帧并存储它,然后调用该函数。