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

double rad(0.05), Rad(0.5);

void orbit(const P& loc)
{
  circle(loc, rad);
  aarrow(loc + P(rad + 0.5*dX_mir,0), loc + P(3,0));

  dashed();
  ellipse(loc, Rad*E_1, Rad*E_2, 0, 360, 30);
  solid();
  masklabel(loc + P(1.5,0), "$l$");
  label(loc + P(3,0), P(4,0), "$O$", r);
  label(loc + P(3,0), P(0,-4), "\\textit{Observer}", b);
}

void direct(const P&loc, const P& dir, const std::string& msg)
{
  circle(loc + Rad*J(dir), rad);
  arrow(loc + Rad*J(dir), loc + Rad*J(dir) + 1.2*Rad*dir);
  label(loc + Rad*J(dir), -7*(dir-J(dir)), msg, c);
  label(loc + Rad*J(dir) + 0.5*Rad*dir, 4*J(dir), "$u$",c);
}

int main()
{
  picture(P(-0.5,-1.5), P(3.5,1.5), "4 x 3in");

  begin();
  degrees();
  arrow_init();

  bold();

  orbit(P(0,-1));
  orbit(P(0,1));

  direct(P(0,-1), -E_1, "$B$");
  direct(P(0, 1),  E_1, "$A$");

  font_face("sc");
  label(P(0.5*(xmin() + xmax()),ymin()), P(0,-12), "Fig.~4.", b);
  tikz_format();
  end();
}
