function TruchetCoul(nc,nl,palette)
%TRUCHETCOUL(NC,NL,PALETTE) représente un pavage de Truchet avec coloration des courbes
%
% NC est le nombre de colonnes et NL, le nombre de lignes
% PALETTE est la palette de couleurs (optionnel).

% la grille est composée de pavés représentés par
% 1 0 ou 0 1 pour indiquer la couleur des arcs (1 au départ)
% 0 1    1 0
% La taille est donc de 2*nc sur 2*nl.

grille=zeros(2*nc,2*nl);
for col=1:nc
	for lig=1:nl
		if fix(rand*2)
			grille(2*col-1,2*lig)=1;
			grille(2*col,2*lig-1)=1;
		else
			grille(2*col-1,2*lig-1)=1;
			grille(2*col,2*lig)=1;
		end
	end
end

% construction du tableau des chemins colorés
% de bas en haut, de gauche à droite. Chaque pavé
% de 1 est remplacé par une nouvelle couleur ou par
% la couleur du seul voisin possible suivant la parité
% du no de la ligne et de la colonne. 

indice_coul=0;
for col=1:2*nc						% parcours des colonnes
	for lig=1:2*nl					% parcours des lignes
		if grille(col,lig)~=0		% les cases non nulles
			if rem(col,2)			
				if rem(lig,2)		% col. impaire, ligne impaire
					if col==1
						nouvelleCouleur
					else
						if grille(col-1,lig)~=0
							grille(col,lig)=grille(col-1,lig); % Ouest
						else
							grille(col,lig)=grille(col-1,lig+1); % Nord-Ouest
						end
					end
					% deux chemins doivent se rejoindre
					% (Sud et Ouest ou Nord-Ouest et Sud)
					if lig~=1
						if grille(col,lig-1)~=0	% Sud
							sud=tab_ind_coul(grille(col,lig-1)); %mémo. du sud
							for k=1:indice_coul		% indirection des coul.
								if tab_ind_coul(k) == sud
									tab_ind_coul(k)=tab_ind_coul(grille(col,lig));
								end
							end
						end
					end
				else	% col. impaire, ligne paire
					if col==1
						nouvelleCouleur
					else
						if grille(col-1,lig)~=0
							grille(col,lig)=grille(col-1,lig);	% Ouest
						else
							grille(col,lig)=grille(col-1,lig-1); % Sud-Ouest
						end
					end
				end
			else	% col. paire
				if rem(lig,2)	% col. paire, ligne impaire
					if lig==1
						nouvelleCouleur
					else
						if grille(col-1,lig-1)~=0
							grille(col,lig)=grille(col-1,lig-1); % Sud-Ouest
						else
							grille(col,lig)=grille(col,lig-1);	% Sud
						end
					end
				else	% col. paire, ligne paire
					if lig==2*nl
						nouvelleCouleur
					else
						if grille(col-1,lig+1)~=0
							grille(col,lig)=grille(col-1,lig+1); % Nord-Ouest
						else
							nouvelleCouleur
						end
					end
				end
			end
		end
	end
end

% Représentation des courbes
t=pi/12:pi/12:2*pi;
x=cos(t);
y=sin(t);
n=length(x);

% différents arcs de cercle
x1=[x(n) x(1:n/4)]; y1=[y(n) y(1:n/4)];
x2=1+x(n/2:3*n/4); y2=1+y(n/2:3*n/4);
x3=1+x(n/4:n/2); y3=y(n/4:n/2);
x4=x(3*n/4:n); y4=1+y(3*n/4:n);

% choix des axes
cla
axis([0 2*nc 0 2*nl])
axis equal
axis off
hold on
if nargin<3	% initialisation des couleurs
	palette=flipud(hsv(256));
	ncoul=max(size(tab_ind_coul));
	palette=palette(1:fix(256/ncoul):256,:);
	colormap(hsv);
else
	colormap(palette);	% couleurs utilisateur
end

% représentation des arcs
figure(gcf)
for col=1:2*nc
	for lig=1:2*nl
		if grille(col,lig)~=0
			couleur=tab_ind_coul(grille(col,lig));
			if rem(col,2)
				if rem(lig,2)
					line(x1+col-1,y1+lig-1,'color',palette(couleur,:));
				else
					line(x4+col-1,y4+lig-1,'color',palette(couleur,:));
				end
			else
				if rem(lig,2)
					line(x3+col-1,y3+lig-1,'color',palette(couleur,:));
				else
					line(x2+col-1,y2+lig-1,'color',palette(couleur,:));
				end
			end
		end
	end
end

% cadre
plot([0 2*nc 2*nc 0 0],[0 0 2*nl 2*nl 0],'w')			
hold off



