http://www.maelabs.ucsd.edu/mae150/mae150_resources/Matlab_Tips/intro_to_kinematic_plotting.htm

%--------------- Introduction to Kinematic Plotting ---------------

%

% MATLAB provides three ways of generating animations:

% 1. Repeatedly execute the 'plot' command in a loop. This is the easiest method

% but results in a flashing screen. (see the first example)

%

% 2. Set up a graph using handle graphics, and repeatedly execute the 'drawnow' command.

% This eliminates the flashing problem. (see the second example)

% 3. Save a number of different pictures and then play them back as a movie. This is useful for very complex figures that would be slow to animate using the prior methods. (see Matlab help)

% Simple (but effective) visualizations can be done with line plots. That is, draw a new line in a new location after a short pause and erase the old line.

% (to plot 3D shapes see the patch command)

% Matlab can help visualize and animate the kinematics of mechanisms and other objects

As you can see, this code allows you to create a simple animation.

%------------ A simple animation using 'plot' and 'drawnow' ------------

% A Simple Animation of a rotation arm

theta_step = 5*pi/180;

r = 1; % radius of the arm

for theta=0:theta_step:2*pi

% In order to draw a stick figure you need to have a start point and an end point

% (in the case of a closed figure the end point must end at the start point;

% this allows the figure to be completely closed), the following two commands define

% the points of the stick figure:

data_pt(1,:) = [0 0]; % first point is the origin

data_pt(2,:) = [r*cos(theta) r*sin(theta)]; % second point is end of vector

plot(data_pt(:,1),data_pt(:,2)); % connect the points with a line

axis([-1.5 1.5 -1.5 1.5]); % set the axis limit to include the range of animation

axis manual % freezes the axis scaling

pause(0.1) % puts a delay in seconds (if time is zero, a keyboard hit is required)

end

disp('Hit the Space Bar to Continue');

pause;

%********************* Ways to reduce flashing ***********************

% Do the animation again while reduce flashing.

% There are two steps to reduce the flashing on the plot. Please see

% ‘Introduction to Graphic Handles’ for help on graphic handles.

% 1. define EraseMode in the ‘plot’ command.

% 2. instead of using ‘plot’ repeatedly, change the data by ‘set’ command.

theta_step = 5*pi/180;

theta = 0:theta_step:2*pi; % generate and store the angle sequence

x_pt = [0 1]; % define the end points of the stick figure

y_pt=[0 0];

axis([-1.5 1.5 -1.5 1.5]);

hold on;

hndl=plot(x_pt,y_pt,'EraseMode','background'); % connect the end points,

% and use "EraseMode" to REDUCE FLASHING

set(gca,'DataAspectRatio',[1 1 1]); % make x,y-axis relative scaling equal

for j=1:length(theta)

x_pt=[0 cos(theta(j))];

y_pt=[0 sin(theta(j))];

set(hndl,'XData',x_pt,'YData',y_pt); % REDUCE FLASHING

drawnow % forces Matlab to redraw the plot at the current values

pause(.1)

end

% Compare this animation with the previous one:

% In this case, we generate and store the end points BEFORE we call them in each loop.

% In the previous one, we generate the end points and draw a new line IN each loop.

% When the process of generating data is complex and the computational time delay

% cannot be ignored, we usually do the computation first, then draw the data in each loop

%------------------------------------------------------------

% Key functions: drawnow, pause(time), set

% Key properties: EraseMode, DataAspectRatio, XData, YData

If you put

ReplyDeletetitle(num2str(j))

in the loop, the traces will not be maintained