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

const double xi(0.7);
const double h(0.4);

P f(double x)
{
  double u((x - xi)*(x - xi));
  return P(x, x + 0.5*u*(1 + u));
}

P phi(double x)
{
  double u((x - xi)*(x - xi));
  return P(x, x + 1.5*u*(1 + (x - xi) + u));
}

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

  begin();
  P pO(0,0), pX(xmax(), 0), pY(0, ymax()),
    pP(f(xi)), pQ(phi(xi + h)), pR(f(xi + h));

  double t1(xi + h + 0.2), t2(xi + h + 0.1);

  bold();

  line(P(xmin(), 0), P(xmax(), 0));
  line(P(0, ymin()), P(0, ymax()));

  plot(f, xi - h, t1, 40);
  plot(phi, xi - h, t2, 40);

  line(pP&E_1, pP);
  line(pQ&E_1, pQ);

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

  label(pP, P( 2,-2), "$P$", br);
  label(pQ, P(-2, 2), "$Q$", l);
  label(pR, P( 2,-2), "$R$", br);

  label(f(t1), P(2,0), "$y = f(x)$", r);
  label(phi(t2), P(2,0), "$y = \\phi(x)$", r);

  label(pP&E_1, P(0, -4), "$\\xi$", b);
  label(pR&E_1, P(0, -4), "$\\xi + h$", b);

  tikz_format();
  end();
}
