[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Loxodromy



Hi,

I believe sample.tex is wrong,  as spherical spirals obtained by central
projection  of  helixes don't  cross  meridians  with  a constant  angle
(samples/sphere.xp).

I suggest something like this:

/* loxodrom.xp, April 11, 2003  */
#include "epix.h"
using namespace ePiX;

double zero (double t) {return 0;}

const double slope = 1/sqrt(3);

inline double exp_cos(double t)
{
  return exp(slope * t) * ePiX::cos(t);
}
inline double exp_sin(double t)
{
  return exp(slope * t) * ePiX::sin(t);
}
inline double minus_exp_cos(double t)
{
  return -exp_cos(t);
}
inline double minus_exp_sin(double t)
{
  return -exp_sin(t);
}

main()
{
  bounding_box(P(-1,-1), P(1,1));
  picture(P(360,360));
  unitlength("1pt");
  viewpoint(1,1,1);

  begin();

  ellipse(P(0,0), P(1,1));

  dotted();
  backplot_R(ePiX::cos, ePiX::sin, zero, 0, 2*M_PI, 60);
  backplot_R(zero, ePiX::cos, ePiX::sin, 0, 2*M_PI, 60);
  backplot_R(ePiX::sin, zero, ePiX::cos, 0, 2*M_PI, 60);

  solid();
  frontplot_R(ePiX::cos, ePiX::sin, zero, 0, 2*M_PI, 60);
  frontplot_R(zero, ePiX::cos, ePiX::sin, 0, 2*M_PI, 60);
  frontplot_R(ePiX::sin, zero, ePiX::cos, 0, 2*M_PI, 60);

  dashed();
  blue();
  backplot_N(exp_cos, exp_sin, -3*M_PI, 3*M_PI, 90);
  backplot_N(minus_exp_cos, minus_exp_sin, -3*M_PI, 3*M_PI, 90);
  red();
  backplot_N(exp_sin, minus_exp_cos, -3*M_PI, 3*M_PI, 90);
  backplot_N(minus_exp_sin, exp_cos, -3*M_PI, 3*M_PI, 90);

  solid();
  bold();
  blue();
  frontplot_N(exp_cos, exp_sin, -3*M_PI, 3*M_PI, 360);
  frontplot_N(minus_exp_cos, minus_exp_sin, -3*M_PI, 3*M_PI, 360);
  red();
  frontplot_N(exp_sin, minus_exp_cos, -3*M_PI, 3*M_PI, 360);
  frontplot_N(minus_exp_sin, exp_cos, -3*M_PI, 3*M_PI, 360);

  end();
}

I hope you like it ...
-- 
Jacques L'helgoualc'h