
#include <helix.h>


helix::helix()
{
  construct(0.0,0);
}

helix::helix
(
  doublec nturns,
  uintc Nspikes_
)
{
  construct(nturns,Nspikes_);
}

helix::helix
(
  doublec nturns,
  uintc Nspikes_,
  doublec length_,
  doublec radius_
)
{
  construct(nturns,Nspikes_);
  length=length_;
  radius=radius_;
}

void helix::construct
(
  doublec nturns,
  uintc Nspikes_
)
{
  Nspikes = Nspikes_;

  double dtheta = 2.0*3.14159265*nturns/(Nspikes-1.0);

  angles.resize(Nspikes);
  double theta;
  for (uint i=0; i<Nspikes; ++i)
  {
    theta = i*dtheta;
    angles[i].x = cos(theta);
    angles[i].y = sin(theta);
  }
}


void helix::draw() 
{
  if (length==0.0)
    return;

  assert(length>0.0);

  double dx = length/(Nspikes-1.0);
  double x;
  glBegin(GL_LINES);
  for (uint i=0; i<Nspikes; ++i)
  {
    x = dx*i;

    glVertex3d(x,radius*angles[i].x,radius*angles[i].y);
    glVertex3d(x,0.0,0.0);
  }
  glEnd();
}


