Volumes.

Yves Combe nous propose deux macros pour la construction d'éprouvettes. J'ai juste ajouté un peu de transparence (qu'on ne voit pas vraiment :)).

volume.mp [ source brut ]

 %@Auteur:Yves Combe
 
 input geometriesyr16;
 
 % quelques variables sans intérêts
 color couleur_liquide;
 couleur_liquide = ciel;
 
 numeric rebord, taille_graduation, marque_graduation, heuteur_graduation;
 rebord = 0.1u;
 taille_graduation = 0.05u;
 marque_graduation = 5;
 hauteur_graduation = 0.9;
 
 vardef eprouvette(expr origine, hauteur, largeur, n_graduations, grad_liquide, unite)=
   begingroup
     pair A,B,C,D,E,F,G,H, grad;
     numeric a;
     
     % le contour
     A = origine + (-rebord, hauteur);
     %show (A);
     B - A = (rebord, 0);
     %show (B);
     B - C = ( 0 , hauteur);
     D - C = (largeur, 0);
     E - D = B - C;
     F - E = B - A;
 
     % le liquide
     G - C = (0, grad_liquide*hauteur_graduation*hauteur/n_graduations);
     H - D = G - C;
     fillcolor:=couleur_liquide;
     transparence (G--H--D--C--cycle);
     draw A--B--C--D--E--F;
 
     % la graduation
     for a:=1 upto n_graduations:
       grad := D + ( 0, a*hauteur_graduation*hauteur/n_graduations);
       if (a mod 5)=0:
 	draw grad--(grad + (2taille_graduation,0));
 	label.rt(decimal a, grad + (2taille_graduation,0));
       else:
 	draw grad--(grad + (taille_graduation,0));
       fi
     endfor
 
     % l'unite s'affiche en haut
     label.rt(unite, F);
   endgroup
 enddef;
 
 numeric caillou_points, caillou_delta;
 caillou_points = 10;
 caillou_delta = 0.05;
 
 color caillou_couleur;
 caillou_couleur = red;
 
 vardef caillou (expr origine, hauteur, largeur) =
   begingroup
     numeric a;
     path caillou, cc;
   
     z[1] = origine + (largeur/2, 0);
     z[2] = origine + (0, hauteur/2);
     z[3] = origine + (largeur/2, hauteur);
     z[4] = origine + (largeur, hauteur/2);
 
     cc =  z[1]..z[2]..z[3]..z[4]..cycle;
 
     caillou = z[1]..
     for a:=1 upto caillou_points-1:
       (point (length cc)*a/caillou_points of cc + (largeur*caillou_delta*normaldeviate,
 	  hauteur*caillou_delta*normaldeviate))..
     endfor  cycle;
     fillcolor:=red;
     transparence caillou;
     draw caillou;
 
   endgroup
 enddef;
 
 
Conversion au format PDF de volume.1
 beginfig(1);
   eprouvette( u*(1,1), 5u, 2u, 20, 13, "dL");
 endfig;
 
 
Conversion au format PDF de volume.2
 beginfig(2);
   caillou( u*(1.5,1.1), 1.5u, 1u);
   eprouvette( u*(1,1), 5u, 2u, 20, 16, "dL");
 endfig;
 end