% Définition du graphisme de Spin-Out

% arcs de cercle
R=2;
pas=pi/100;
t1=-pi/4:pas:pi/4;
t2=pi/4:pas:3*pi/4;
t3=3*pi/4:pas:5*pi/4;
t4=5*pi/4:pas:7*pi/4;
x1=R*cos(t1);
y1=R*sin(t1);
x2=R*cos(t2);
y2=R*sin(t2);
x3=R*cos(t3);
y3=R*sin(t3);
x4=R*cos(t4);
y4=R*sin(t4);

% pièces

D=2*R*cos(pi/4);
p1x=[x3+D x2 x1-D fliplr(x2)];
p1y=[fliplr(y3) y2 fliplr(y1) y2-D];
p2x=[x3+D fliplr(x4) x3 fliplr(x2)];
p2y=[fliplr(y3) y4+D y3 y2-D];

% représentation initiale
L=31;
fig=figure('name','Spinout','NumberTitle','off');
fill([0 L L 0],[0 0 5 5 ],[.6 .6 .6])	% fond
set(gca,'position',[0 0 1 1])
axis([0 40 -12.2 17.2])
axis equal
axis off
hold on
fill([0 x4+7*D+1 31 31 0],[1 y4+2.4 1 0 0],[.4 .4 .4])					% encoche
fill([0 2.4 3.8 23.4 25 31 31 0],[4 4 4.5 4.5 4 4 5 5],[.4 .4 .4])
text(4,10,'La solution est la suivante:','FontSize',32)
% pièces verticales
for i=1:13
	h1(i)=fill(p1x+i*D+1,p1y+2.5,'y','visible','off');
end

% pièces horizontales
for i=1:13
	h2(i)=fill(p2x+i*D+1,p2y+2.5,'y','visible','off');
end

set(h1(1:7),'visible','on')
figure(fig)

% calcul des codes de Gros-Grey de 0 à 85
g=grosgrey(7);		% 7 bits
g=g(1:86,:);		% de 0 à 85

sola=ones(1,7);		% solution précédente
posc=7;				% position de rotation

% boucle solution
for i=86:-1:1
	sol=g(i,:);
	pad=find(sol~=sola);	% position à déplacer
	dep=posc-pad;			% déplacement
	sola=sol;
	set(h1,'visible','off')
	set(h2,'visible','off')
	for j=1:7
		if sol(j)
			set(h1(dep+j),'visible','on')
		else
			set(h2(dep+j),'visible','on')
		end
	end
	pause(1)
end

hold off
