%@Auteur: Jean-Michel Sarlat %@Date: 19 avril 2005 input graph; input fonctions; input panneaux; u = 2cm; color couleur; 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: % % 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; % facteur d'éclairement. Les deux variables minE et max E sont relatives % à chaque tube, calculées au moment de la construction des fichiers <*.s> % elles sont affectées dans les fichiers <*.mp>. def fe(expr e) = (0.3+0.7/(maxE-minE)*(e-minE)) enddef; % Dessin des dalles. def dalle(expr i,j,a,b,c,d,e) = fill (a--b--c--d--cycle) scaled u withcolor (fe(e)*couleur); enddef; vardef f(expr t) = 2*cos(t) enddef; vardef g(expr t) = 2*sin(t) enddef; vardef h(expr t) = 0 enddef; couleur := (0,1,0.5); beginfig(1); input tore.a.mp; fill pX scaled u withcolor 0.8white; draw CourbeYZ(g,h,Pi/2,3Pi/2,2) scaled u withcolor blue; fill pY scaled u withcolor 0.8white; draw CourbeZX(h,f,0,Pi,2) scaled u withcolor blue; fill pZ scaled u withcolor 0.8white; draw CourbeXY(f,g,0,2Pi,40) scaled u withcolor blue; Surface("tore.a.s"); endfig; vardef f(expr t) = 2*cos(t) enddef; vardef g(expr t) = 2*sin(t) enddef; vardef h(expr t) = 0 enddef; couleur := (1,0.76,0.15); beginfig(2); input demi_tore.a.mp; fill pX scaled u withcolor 0.8white; draw CourbeYZ(g,h,3Pi/2,2Pi,2) scaled u withcolor blue; fill pY scaled u withcolor 0.8white; draw CourbeZX(h,f,-Pi,0,2) scaled u withcolor blue; fill pZ scaled u withcolor 0.8white; draw CourbeXY(f,g,Pi,2Pi,40) scaled u withcolor blue; Surface("demi_tore.a.s"); endfig; vardef f(expr t) = (1-cos(t))*cos(t) enddef; vardef g(expr t) = (1-cos(t))*sin(t) enddef; vardef h(expr t) = 0 enddef; couleur := (0,0.98,1); beginfig(3); input cardio01.a.mp; fill pX scaled u withcolor 0.8white; draw CourbeYZ(g,h,Pi/2,3Pi/2,2) scaled u withcolor blue; fill pY scaled u withcolor 0.8white; draw CourbeZX(h,f,0,Pi,2) scaled u withcolor blue; fill pZ scaled u withcolor 0.8white; draw CourbeXY(f,g,0,2Pi,40) scaled u withcolor blue; Surface("cardio01.a.s"); endfig; vardef f(expr t) = (1-cos(t))*cos(t) enddef; vardef g(expr t) = (1-cos(t))*sin(t) enddef; vardef h(expr t) = -0.3sin(t) enddef; couleur := (1,0.1,0.6); def dalle(expr i,j,a,b,c,d,e) = fill (a--b--c--d--cycle) scaled u withcolor (fe(e)*couleur); draw (a--b--c--d--cycle) scaled u withpen pencircle scaled 0.25 withcolor (fe(e)*0.7*couleur); enddef; beginfig(4); input cardio02.a.mp; fill pX scaled u withcolor 0.8white; draw CourbeYZ(g,h,0,2Pi,80) scaled u withcolor blue; fill pY scaled u withcolor 0.8white; draw CourbeZX(h,f,0,2Pi,80) scaled u withcolor blue; fill pZ scaled u withcolor 0.8white; draw CourbeXY(f,g,0,2Pi,80) scaled u withcolor blue; Surface("cardio02.a.s"); endfig; couleur := (1,0.4,0.2); beginfig(5); input cardio03.a.mp; fill pX scaled u withcolor 0.8white; draw CourbeYZ(g,h,0,2Pi,80) scaled u withcolor blue; fill pY scaled u withcolor 0.8white; draw CourbeZX(h,f,0,2Pi,80) scaled u withcolor blue; fill pZ scaled u withcolor 0.8white; draw CourbeXY(f,g,0,2Pi,80) scaled u withcolor blue; Surface("cardio03.a.s"); endfig; vardef f(expr t) = cos(4*t) enddef; vardef g(expr t) = sin(4*t) enddef; vardef h(expr t) = t enddef; couleur := (0.4,1,0.6); beginfig(6); input helice01.a.mp; fill pX scaled u withcolor 0.8white; draw CourbeYZ(g,h,0,2Pi,80) scaled u withcolor blue; fill pY scaled u withcolor 0.8white; draw CourbeZX(h,f,0,2Pi,80) scaled u withcolor blue; fill pZ scaled u withcolor 0.8white; draw CourbeXY(f,g,0,2Pi,80) scaled u withcolor blue; % La taille des fichiers lus semble être limitée, d'où % la nécessité de les scinder. Surface("helice01.a.s.1"); Surface("helice01.a.s.2"); endfig; vardef f(expr t) = t*cos(4*t) enddef; vardef g(expr t) = t*sin(4*t) enddef; vardef h(expr t) = t enddef; couleur := (0.4,0.6,1); beginfig(7); input helice02.a.mp; fill pX scaled u withcolor 0.8white; draw CourbeYZ(g,h,-Pi,Pi,180) scaled u withcolor blue; fill pY scaled u withcolor 0.8white; draw CourbeZX(h,f,-Pi,Pi,180) scaled u withcolor blue; fill pZ scaled u withcolor 0.8white; draw CourbeXY(f,g,-Pi,Pi,180) scaled u withcolor blue; Surface("helice02.a.s.1"); Surface("helice02.a.s.2"); endfig; end