How to combine animations, add title and edit limits
4 次查看(过去 30 天)
显示 更早的评论
Hello, how could i animate these 3 motions together as a smooth one? They seem to show up as different figures, once the one finishes animating the next one starts.
animate_pendulum(2*rd,tzd,(1.5*pi)-zd(:,1))
hold on
animate_pendulum(2*rm,tzm-tzm(1),(1.5*pi)-zm(:,1))
hold on
animate_pendulum(2*rc,tzc-tzc(1),(1.5*pi)-zc(:,1))
where
function animate_pendulum(L,t,thet)
% L = 1;
x = L*sin(thet);
y = -L*cos(thet);
figure
hold on
box on
axis square
set(gca,'XTick',[], 'YTick',[], ...
'XLim',[-1,+1]*1.1, 'YLim',[-1,+1]*1.1)
plh_bar = plot([0,x(1)],[0,y(1)],'-k','LineWidth',2); % Pendulum arm
plh_bob = plot(x(1),y(1),'.k','MarkerSize',30); % Pendulum bob
plot(0,-0.045,'^r','MarkerSize',10,'MarkerEdgeColor','red','MarkerFaceColor',[1 .6 .6]) % Pivot
drawnow
tic
while toc < t(end)
[~,idx] = min(abs(t - toc));
set(plh_bar,'XData',[0,x(idx)],'YData',[0,y(idx)])
set(plh_bob,'XData',x(idx),'YData',y(idx))
drawnow
end
set(plh_bar,'XData',[0,x(end)],'YData',[0,y(end)])
set(plh_bob,'XData',x(end),'YData',y(end))
drawnow
Also I want to add the following but dont know where:
ylimits=[-0.3,1.3];
ylim(ylimits)
xlimits=[-1.3,1.3];
xlim(xlimits)
title('ROOF MOTION REPRESENTATION','RETRACTION')
0 个评论
采纳的回答
Geoff Hayes
2022-4-18
@Grigorios Chatziandreou - the animate_pendulum function creates a figure each time it is called which is why you will see one figure for each pendulum. Also, because of the while loop, the subsequent call to this function will be blocked until the while loop completes. If you want one figure to show all of the pendulums, then you could modify the code so that you are passing in data for each pendulum (whether you do this as an array for each input parameter, or an array of structs where each struct encapsulates the data for the pendulum, etc.) and so that each is drawn simulataneously. Alternatively, you could create a figure and maybe a timer for each pendulum whose timer callback will update the figure with the new pendulum position.
I couldn't run your code because it wasn't clear what the inputs should be (L is length, t is an array of times in seconds presumably, and theta an angle). From the code, it looks like there is an assumption that theta is an array of angles so that x and y are arrays too (so you must be calculating the angles elsewhere).
As for the other code, why not add it in as soon as you create the axes? Or does that fail for some reason?
0 个评论
更多回答(0 个)
另请参阅
类别
在 Help Center 和 File Exchange 中查找有关 Graphics Performance 的更多信息
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!