Hi guys I would like to know how to make a movie of a sine wave using handle graphics and for each frame a for loop with getframe
a = -1; z = 0:pi/1000:2*pi; y = a*sin(z)

 Accepted Answer

Image Analyst
Image Analyst on 23 Oct 2014
See my attached demo. Just change the surf() call to plot() and it should work.

More Answers (1)

Ced
Ced on 23 Oct 2014
Edited: Ced on 23 Oct 2014
Something like that? (reduced the number of frames)
clear all
clc
close all
a = -1;
z = 0:pi/100:2*pi;
y = a*sin(z);
Nz = length(z);
% Set up your plot environment
figure
h = plot(z(1),y(1));
xlim([z(1) z(end)])
ylim([min(y) max(y)])
xlabel('z')
ylabel('a*sin(z)')
legend('my sine function')
init_getframe = struct('cdata',[],'colormap',[]);
frames = repmat(init_getframe, Nz, 1 );
frames(1) = getframe;
% Get frames
for i = 2:Nz
set(h,'XData',z(1:i));
set(h,'YData',y(1:i));
drawnow
frames(i) = getframe;
end
% Play movie
movie(frames)
But from experience, I prefer to save each frame to a file (e.g. .png), and then combine the frames later into a movie.
*EDIT*: I was a bit too slow. Make sure to check out Image Analysts answer for some extra frame size settings etc.

4 Comments

Yip its exactly like this. Thanks a lot for your help. Wish your solution was here earlier I would have accepted it
Thanks for accepting. Once you replace surf with plot and the Gaussian with sine, my code and Ced's are largely the same with the getframe() call being the key part, except that mine has also code for saving the movie to disk, in case you want to do that.
What if i want to increase the speed of animation, i mean i want to show more data samples at a time.
please reply with an answer.
Set the framerate property of the video writer.

Sign in to comment.

Categories

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!