Le ruban de Möbius (1790-1868)
Les figures présentées ci-dessous sont des représentations
du ruban calculées extérieurement à METAPOST.
Les différents fichiers utilisés (mobius{a|b|c}.s)
sont dans l'archive.
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
|