% Figures 2-7 from _MetaPlot, MetaContour, and Other Collaborations
% with METAPOST_, preprint version, given at the Practical TeX 2004
% conference.

prologues:=0;
input metaplot    % MetaPlot macros

% capillary.mp and capillary2.mp are both produced as output of the 
% program capillary.cc.  The relevant parameters in the program
% (lines 29-30) are:
%
% For capillary.mp:
%    double theta = pi/4.0;
%    double d = 1.0;
%
% For capillary2.mp:
%    double theta = pi/6.0;
%    double d = 1.0;

input capillary   % capillary plot object
input capillary2  % capillaryb plot object


% Figure 2: The capillary surface, in its unadorned form as plot
% object elements scaled to 2.0in by 0.75in.

plot_instantiate(plotA, capillary)
plotA.pageleft = 0.0;
plotA.pagebottom = 0.0;
plotA.pagewidth = 2.0in;
plotA.pageheight = 0.75in;

beginfig(2)
  draw plotA.plot(fplot) withcolor 0.85white;
  draw plotA.plot(lplot) withpen pencircle scaled 1pt;
endfig;


% Figure 3: The capillary surface, with equal y and z scales, a page
% height of 0.75in, and appropriate annotations.

plot_instantiate(plotB, capillary)
plotB.pageleft = 0.0;
plotB.pagebottom = 0.0;
plotB.pageheight = 0.75in;
plot_setequalaxes(plotB);

beginfig(3)
  draw plotB.plot(fplot) withcolor 0.85white;
  linecap := butt;
  pickup pencircle scaled 1pt;
  % z-axis (vertical)
  z1 = (plotB.pageleft, plotB.pagebottom);
  z2 = (plotB.pageleft, plotB.pagetop + 0.1in);
  % y-axis (horizontal)
  z3 = (plotB.pageleft, plot_ypageloc(plotB,0.0));
  z4 = (plotB.pageright + 0.1in,
          plot_ypageloc(plotB,0.0));
  drawarrow z1 -- z2;
  label.top(btex $z$ etex, z2);
  drawarrow z3 -- z4;
  label.rt(btex $y$ etex, z4);
  pickup pencircle scaled 0.25pt;
  % Label for contact angle
  z5 = plotB.plot(contactpoint);
  z6 = z5 + 0.24in
        * dir(-90 + capillary.contactangle);
  z7 = z5 + 0.18in
        * dir(-90 + 0.5*capillary.contactangle);
  draw z5 -- z6;
  label(btex $\theta$ etex, z7);
endfig;


% Figure 4: The capillary surface with parameters and page height as
% in Figure 3, but with $\theta = \pi/6$.

plot_instantiate(plotC, capillaryb)
plotC.pageleft = 0.0;
plotC.pagebottom = 0.0;
plotC.pageheight = 0.75in;
plot_setequalaxes(plotC);

beginfig(4)
  draw plotC.plot(fplot) withcolor 0.85white;
  linecap := butt;
  pickup pencircle scaled 1pt;
  % z-axis (vertical)
  z1 = (plotC.pageleft, plotC.pagebottom);
  z2 = (plotC.pageleft, plotC.pagetop + 0.1in);
  % y-axis (horizontal)
  z3 = (plotC.pageleft, plot_ypageloc(plotC,0.0));
  z4 = (plotC.pageright + 0.1in,
          plot_ypageloc(plotC,0.0));
  drawarrow z1 -- z2;
  label.top(btex $z$ etex, z2);
  drawarrow z3 -- z4;
  label.rt(btex $y$ etex, z4);
  pickup pencircle scaled 0.25pt;
  % Label for contact angle
  z5 = plotC.plot(contactpoint);
  z6 = z5 + 0.24in
        * dir(-90 + capillaryb.contactangle);
  z7 = z5 + 0.18in
        * dir(-90 + 0.5*capillaryb.contactangle);
  draw z5 -- z6;
  label(btex $\theta$ etex, z7);
endfig;


% Figure 5: Two capillary surfaces, as in Figure 3 and Figure 4, showing
% the difference in the curves as a result of varying $\theta$.

plot_instantiate(plotD, capillary)
plotD.pageleft = 0.0;
plotD.pagebottom = 0.0;
plotD.pageheight = 0.75in;
plot_setequalaxes(plotD);

plot_instantiate(plotE, capillaryb)
plot_zpageloc(plotD, 0.0, 0.0)
 = plot_zpageloc(plotE, 0.0, 0.0);
plot_zpageloc(plotD, 1.0, 1.0)
 = plot_zpageloc(plotE, 1.0, 1.0);

beginfig(5)
  linecap := butt;
  pickup pencircle scaled 1pt;
  draw plotD.plot(fplot) withcolor 0.85white;
  draw plotE.plot(lplot) dashed evenly
    withpen pencircle scaled 0.5pt;
  % z-axis (vertical)
  z1 = (plotD.pageleft, plotD.pagebottom);
  x2 = plotD.pageleft;
  y2 = max(plotD.pagetop, plotE.pagetop) + 0.1in;
  % y-axis (horizontal)
  z3 = (plotD.pageleft, plot_ypageloc(plotD,0.0));
  x4 = max(plotD.pageright, plotE.pageright) + 0.1in;
  y4 = plot_ypageloc(plotD,0.0);
  drawarrow z1 -- z2;
  label.top(btex $z$ etex, z2);
  drawarrow z3 -- z4;
  label.rt(btex $y$ etex, z4);
endfig;
end


% Figure 6: A repeat of Figure 5, with simple grid labels added.

beginfig(6)
  linecap := butt;
  pickup pencircle scaled 1pt;
  draw plotD.plot(fplot) withcolor 0.85white;
  draw plotE.plot(lplot) dashed evenly
    withpen pencircle scaled 0.5pt;
  % z-axis (vertical)
  z1 = (plotD.pageleft, plotD.pagebottom);
  x2 = plotD.pageleft;
  y2 = max(plotD.pagetop, plotE.pagetop) + 0.1in;
  % y-axis (horizontal)
  z3 = (plotD.pageleft, plot_ypageloc(plotD,0.0));
  x4 = max(plotD.pageright, plotE.pageright) + 0.1in;
  y4 = plot_ypageloc(plotD,0.0);
  drawarrow z1 -- z2;
  label.top(btex $z$ etex, z2);
  drawarrow z3 -- z4;
  label.rt(btex $y$ etex, z4);
  x5 = plotD.pageleft;
  x6 = x4;
  y5 = y6 = plotD.pagebottom;
  draw plot_xtickscale(plotD)(
    z5, z6, 0.08in, 0.06in, down,
    0.0, 1.0, "%3f")
    withpen pencircle scaled 0.5pt;
  y7 = plotD.pagebottom;
  y8 = y2;
  x7 = x8 = plotD.pageleft;
  draw plot_ytickscale(plotD)(
    z7, z8, 0.08in, 0.06in, left,
    0.0, 0.5, "%3f")
    withpen pencircle scaled 0.5pt;
endfig;


% Figure 7: A repeat of Figure 5 again, with more advanced grid labels.

beginfig(7)
  linecap := butt;
  pickup pencircle scaled 1pt;
  draw plotD.plot(fplot) withcolor 0.85white;
  draw plotE.plot(lplot) dashed evenly
    withpen pencircle scaled 0.5pt;
  % z-axis (vertical)
  z1 = (plotD.pageleft, plotD.pagebottom);
  x2 = plotD.pageleft;
  y2 = max(plotD.pagetop, plotE.pagetop) + 0.1in;
  % y-axis (horizontal)
  z3 = (plotD.pageleft, plot_ypageloc(plotD,0.0));
  x4 = max(plotD.pageright, plotE.pageright) + 0.1in;
  y4 = plot_ypageloc(plotD,0.0);
  drawarrow z1 -- z2;
  label.top(btex $z$ etex, z2);
  drawarrow z3 -- z4;
  label.rt(btex $y$ etex, z4);
  x5 = plotD.pageleft;
  x6 = x4 - 0.1in;
  y5 = y6 = plotD.pagebottom - 0.06in;
  draw plot_xtickscale(plotD)(
    z5, z6, 0.08in, 0.06in, down,
    0.5, 1.0, "%3f")
    withpen pencircle scaled 0.5pt;
  draw plot_xtickscale(plotD)(
    z5, z6, 0.08in, 0.06in, down,
    0.0, 1.0, "")
    withpen pencircle scaled 0.5pt;
  draw plot_xtickscale(plotD)(
    z5, z6, 0.04in, 0.06in, down,
    0.0, 0.1, "")
    withpen pencircle scaled 0.5pt;
  y7 = y4;
  y8 = y2 - 0.1in;
  x7 = x8 = plotD.pageleft - 0.06in;
  draw plot_ytickscale(plotD)(
    z7, z8, 0.08in, 0.06in, left,
    0.0, 0.5, "%3f")
    withpen pencircle scaled 0.5pt;
  draw plot_ytickscale(plotD)(
    z7, z8, 0.04in, 0.06in, left,
    0.0, 0.1, "")
    withpen pencircle scaled 0.5pt;
endfig;

end