% This is an animation for a CRANK SLIDER
%
% Carlos R. Paiva
%
% 12 Septermber 2017


clear all
close all

a = 2;  b = 5;
P1 = [0 0];
r = 0.1;
p1 = [-r -r 2*r 2*r];

axis(gca,'equal');
axis(gca,'off'); 

delta = 0.5;
axis([-a-delta a+b+delta -a-delta a+delta]);

rectangle('Position',[-a -a 2*a 2*a],'Curvature',[1 1],'FaceColor',[255 204 204]/255,'EdgeColor','none')
rectangle('Position',[-a+b -delta b-2*delta 2*delta],'FaceColor',[255 204 204]/255,'EdgeColor','none')
line([-a+b a+b],[0 0],'Color',[1 0 0],'LineWidth',2) 
P2_traj = viscircles([0 0],a,'LineWidth',2);

% Number of turns is N
N = 10;
theta = 360*N;

for alfa = 0:theta
    P2 = a*[cosd(alfa) sind(alfa)];
    p2 = [P2(1)-r P2(2)-r 2*r 2*r];
    beta = asind(a*sind(alfa)/b);
    P3 = [(a*cosd(alfa) + b*cosd(beta)) 0];
    p3 = [P3(1)-r P3(2)-r 2*r 2*r];
    crank = line([P1(1) P2(1)],[P1(2) P2(2)],'Color',[0 0 1],'LineWidth',2);
    slider = line([P2(1) P3(1)],[P2(2) P3(2)],'Color',[0 0 1],'LineWidth',2);
    P1_circle = rectangle('Position',p1,'Curvature',[1 1],'FaceColor',[0 0 1],'EdgeColor','none');
    P2_circle = rectangle('Position',p2,'Curvature',[1 1],'FaceColor',[0 0 1],'EdgeColor','none');
    P3_circle = rectangle('Position',p3,'Curvature',[1 1],'FaceColor',[0 0 1],'EdgeColor','none');
    pause(0.001);
    delete(crank);
    delete(P1_circle);
    delete(P2_circle);
    delete(P3_circle);
    delete(slider);
end

