#include "epix2.h"
using namespace ePiX2;

void hopf_links(const double rad, World& w, 
		const Duo_Pen& pen, const unsigned int N=24)
{
  const double Rad(sqrt(1+rad*rad));
  Point ctr(rad,0,0);
  Circle circle(ctr, Rad, Vector(ctr, 0, sqrt(rad)/Rad, -1.0/Rad));
  circle.stroke(pen);

  for (int i=0; i<N; ++i)
    w << circle.rotate(2*M_PI/N, E_3());
}

int main() {

  World world;
  //  World layer;

  Camera camera;
  Picture picture(Pair(-4,-2), Pair(4,2), "6x3in");

  picture.backing(Black()).border(White(), "4pt");

  Duo_Pen green(Green(1.2), "2pt", Green(0.6), "4pt");
  Duo_Pen blue(Blue(1.5), "2pt", Blue(0.8), "4pt");
  Duo_Pen purple(RGB(0.8,0.6,1), "2pt", RGB(0.6, 0, 0.8), "4pt");
  Duo_Pen neon(Red(1.5), "2pt", Red(0.6), "4pt");

  world << Circle().stroke(neon);

  hopf_links(0.5, world, green, 12);
  hopf_links(1, world, blue, 18);
  hopf_links(2, world, purple, 18);

  camera.at(Point(1, 6, 3));

  world.fog(Black(), 0.75,6);

  world.photo(picture, camera);
  picture.crop();

  print(picture, "hopf2.eepic", PSTricks());
}
