/* -*-ePiX-*- */
#include "epix.h"
using namespace ePiX;

double f(double x)
{
  return 0.2*exp(x);
}

Deriv df(f);

int main()
{
  picture(P(0, 0), P(2, 1), "3 x 1.5in");

  begin();
  double X0(1), delta(0.55);

  P pP(X0, f(X0)), pNl(X0 - delta, 0), pNr(X0 + delta, 0), pM(X0, 0),
    pQl(X0 - delta, f(X0 - delta)), pRl(X0 - delta, pP.x2()),
    pQr(X0 + delta, f(X0 + delta)), pRr(X0 + delta, pP.x2()),
    pO(0,0), pX(xmax(), 0), pY(0, ymax()),
    tgt(1, df.eval(X0)), pTl(pP - 1.05*delta*tgt), pTr(pP + 2*delta*tgt);

  bold();

  line(pO, pX);
  line(pO, pY);

  line(pTl, pTr);
  line(pP, pQl);
  line(pP, pQr);

  line(pM, pP);
  line(pRr, pQr);

  rect(pNl, pRr);

  plot(f, -0.05, 1.7, 40);

  label(pP,  P(2,-2), "$P$", br);

  label(pQl, P(-2,2), "$Q$", tl);
  label(pQr, P( 0,4), "$Q$", t);

  label(pRl, P(-2,0), "$R$", l);
  label(pRr, P( 2,0), "$R$", r);

  label(pTr, P(2,-2), "$T$", br);

  label(pO, P(0, -4), "$O$", b);
  label(pX, P(0, -4), "$X$", b);
  label(pY, P(-2, 0), "$Y$", l);

  label(pNl, P(0, -4), "$N$", b);
  label(pNr, P(0, -4), "$N$", b);
  label(pM,  P(0, -4), "$M$", b);

  arc_measure(pP, E_1, tgt, P(2,2), "$\\psi$", r, 24);

  tikz_format();
  end();
}
