input graph;

u = 2cm;
color couleur;
couleur := (0.85,0.65,0.13);

let ST = scantokens;

% Lecture du fichier de données à l'aide de la procédure gdata de graph.mp
% Chaque ligne du fichier correspond à une dalle, de la plus éloignée à la
% plus proche du  point de vue. Les données sont structurées  de la façon
% suivante: 
% <indice1> <indice2> <point1> <point2> <point3> <point4> <facteur d'éclairement>
% Les  indices sont  les références  de la dalle (deux paramètres) et les 
% points sont les sommets du quadrilatère représentant la dalle.
% Les données  étant rendues comme chaîne  de caractère  par gdata, elles 
% sont converties dans leur type MetaPost à l'aide l'instruction scantokens.
vardef Surface(expr s) =
    gdata(s,p,dalle(ST p1,ST p2,ST p3,ST p4,ST p5,ST p6,ST p7))
enddef;

def dalle(expr i,j,a,b,c,d,e) =
    fill (a--b--c--d--cycle) scaled u withcolor (e*couleur);
    draw (a--b--c--d--cycle) scaled u withcolor (0.6*e*couleur);
enddef;


beginfig(1);
    Surface("mobiusa.s");
endfig;

beginfig(2)
    couleur := (0.42,0.65,0.80);
    Surface("mobiusb.s");
endfig;

beginfig(3)
    couleur := (0.2,0.8,0.2);
    Surface("mobiusc.s");
endfig;

path p;

% On change la méthode de rendu de la dalle.
def dalle (expr i,j,a,b,c,d,e) =
    draw (a--b--c--d--cycle) scaled u 
	withpen pencircle scaled 0.4pt
	withcolor (1-sqrt(e))*white;
enddef;

beginfig(4)
    Surface("mobiusc.s");
endfig;

def dalle (expr i,j,a,b,c,d,e) =
  p := (a--b--c--d--cycle) scaled u ;
  if (i+j) mod 2 = 0:
    fill p withcolor e*couleur;
  fi;
enddef;

beginfig(5)
    couleur := (0.93,0.47,0.62);
    Surface("mobiusb.s");
endfig;

def dalle (expr i,j,a,b,c,d,e) =
  p := (a..b..c..d..cycle) scaled u;
  fill p withcolor e*couleur;
  draw p withpen pencircle scaled 0.5pt 
    withcolor (white-couleur);
enddef;

beginfig(6)
    couleur := (0.0,0.0,0.8);
    Surface("mobiusa.s");
endfig;

def dalle (expr i,j,a,b,c,d,e) =
    fill (a--b--c--d--cycle) scaled u 
	withpen pencircle scaled 0.4pt
	withcolor e*couleur;
enddef;

beginfig(7)
    label(btex 
	    $\displaystyle%
                \left\{\matrix{X&=&(2+v\cos u)\cos 2u\cr
                               Y&=&(2+v\cos u)\sin 2u\cr
			       Z&=&v\sin u\hfill}\right.$
	  etex scaled 2.5,(-2u,2.3u)) withcolor (.2,.4,.1);
    couleur := (0.93,0.46,0);
    Surface("mobiusb.s");
    pair O;
    O = center currentpicture;
    draw (bbox currentpicture shifted -O) 
	scaled 1.05 shifted O 
	withcolor blue;
endfig;

end