function Hilbert3D(n)

% Démonstration de l'utilisation de REECRITURE, TORTUE3D
% et MATROTDEF.

% Courbe de Hilbert dans l'espace de niveau N

% Définitions des règles
% axiome initial
S='A';
Axiomes=['A';'B';'C';'D'];
Regles =str2mat(...
	'B-F+CFC+F-D&F^D-F+&&CFC+F+B//',...
    'A&F^CFB^F^D^^-F-D^|F^B|FC^F^A//',...
    '|D^|F^B-F+C^F^A&&FA&F^C+F+B^F^D//',...
    '|CFB-F+B|FA&F^A&&FB-F+B|FC//');
S=reecriture(S,n,Axiomes,Regles);

% parcours d'une tortue à 3D
X=Tortue3D(S,pi/2);

% représentations (commentaires)

%plot3(P(1,:),P(2,:),P(3,:))	% fil de fer
%axis equal
%axis off
%figure(gcf)
%pause

% arrondi des angles: chaque sommet est remplacé par
% 4 points.
[nl,nc]=size(X);
if ~rem(nc,2)
	X=[X,X(:,nc)];
	nc=nc+1;
end
P=zeros(3,2*nc);
f=10; 		% facteur de réduction
for i=1:nc-1
	x1=X(:,i);
	x2=X(:,i+1);
	P(:,2*i-1)=((f-1)*x1+x2)/f;
	P(:,2*i)=((f-1)*x2+x1)/f;
end

[x,y,z]=ver3(P(1,:),P(2,:),P(3,:),.1);	% en tube
[nx,ny,nz]=surfnorm(x,y,z);
r=diffuse(nx,ny,nz,[20 30]);
surf(x,y,z,r)
set(gca,'position',[0 0 1 1]);
colormap(copper) 
%colormap(hot)
shading interp
axis square
set(gca,'box','on')
set(gca,'xtick',[])
set(gca,'ytick',[])
set(gca,'ztick',[])
a=axis;
a=a-sign(a).*0.5;
axis(a);
view([-37.5 20])
figure(gcf)

	
