%@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;

beginfig(1);
  eprouvette( u*(1,1), 5u, 2u, 20, 13, "dL");
endfig;

beginfig(2);
  caillou( u*(1.5,1.1), 1.5u, 1u);
  eprouvette( u*(1,1), 5u, 2u, 20, 16, "dL");
endfig;
end