% Représentation des triangles de Reuleaux

% Jean-Bernard Roux, collège de Saussure, genève, novembre 2002

% définition des sommets
A=[-1/2 0];
B=[sqrt(3)/2-1/2 -1/2];
C=[sqrt(3)/2-1/2 1/2];
xs=[A(1) B(1) C(1)];
ys=[A(2) B(2) C(2)];

% définition des arcs
tbc=11*pi/6:pi/200:13*pi/6;
xa=A(1)+cos(tbc);
ya=A(2)+sin(tbc);
tac=3*pi/6:pi/200:5*pi/6;
xb=B(1)+cos(tac);
yb=B(2)+sin(tac);
tab=7*pi/6:pi/200:9*pi/6;
xc=C(1)+cos(tab);
yc=C(2)+sin(tab);
x=[xa xb xc];
y=[ya yb yc];

% dessin des triangles initiaux
fill([-1/2 1/2 1/2 -1/2 -1/2],[-1/2 -1/2 1/2 1/2 -1/2],'w')
hold on
axis equal
axis off
axis([-1/2-0.1 1/2+0.1 -1/2-0.1 1/2+0.1])
plot(xs,ys,'og');
h=fill(x,y,'m');
figure(gcf)
set(gcf,'doublebuffer','on')

% calcul des positions du centre de masse
pas=pi/300;
i=1;
for a=pi/3:-pas:pi/6    % premier quadrant
    xm(i)=((-3+sqrt(3)*cos(a)+3*sin(a))/6);
    ym(i)=((-3+3*cos(a)+sqrt(3)*sin(a))/6);
    i=i+1;
end
for a=pi/6+pas:pas:pi/3    % 2e quadrant
    xm(i)=((3-sqrt(3)*cos(a)-3*sin(a))/6);
    ym(i)=((-3+3*cos(a)+sqrt(3)*sin(a))/6);
    i=i+1;
end
for a=pi/3-pas:-pas:pi/6    % 3e quadrant
    xm(i)=((3-sqrt(3)*cos(a)-3*sin(a))/6);
    ym(i)=((3-3*cos(a)-sqrt(3)*sin(a))/6);
    i=i+1;
end
for a=pi/6+pas:pas:pi/3-pas   % 4e quadrant
    xm(i)=((-3+sqrt(3)*cos(a)+3*sin(a))/6);
    ym(i)=((3-3*cos(a)-sqrt(3)*sin(a))/6);
    i=i+1;
end

% animation
xmi=-1/2+sqrt(3)/3;  % centre de masse au départ
x=x-xmi;
xs=xs-xmi;  % sommets
c=plot(xmi,0,'.');
x0=0-xmi;   % origine
y0=0;
plot(x0+xmi,y0,'y');

i=1;
nbp=length(xm);
for t=0:pas:2*pi; % pi/2+pi/6
    % trace laissée par le centre de masse
    xn=x*cos(-t)-y*sin(-t);
    yn=x*sin(-t)+y*cos(-t);
    plot(xm(i),ym(i))
    % triangle
    set(h,'XData',xn+xm(i),'YData',yn+ym(i))
    % sommets A, B et C
    xsn=xs*cos(-t)-ys*sin(-t);
    ysn=xs*sin(-t)+ys*cos(-t);
    plot(xsn+xm(i),ysn+ym(i),'.g')
    % déplacement du centre de masse
    set(c,'XData',xm(i),'YData',ym(i))
    % trace laissée par l'origine
    x0n=x0*cos(-t)-y0*sin(-t);
    y0n=x0*sin(-t)+y0*cos(-t);
    plot(x0n+xm(i),y0n+ym(i),'y')
    i=i+1;
    if i>nbp
        i=1;
    end
    drawnow
end
set(gcf,'color','w')
hold off
