#!/usr/bin/nawk -f $0
BEGIN {
# Changing this from the command line is left as an exercise for the reader
  num_frames = 7
  pi2 = 2*atan2(0,-1)
}
{
  if(lineno == 0) {
    num_verts = $2
    frame_delay = 0.05
  }
  else if(lineno <= num_verts) {
    data[lineno,"flags"] = $1
    data[lineno,"x"]     = $2
    data[lineno,"y"]     = $3
    data[lineno,"z"]     = $4
    data[lineno,"color"] = $5
  } else {
    
  }
  lineno = lineno + 1
}

END {
  printf("%d %d %f\n",num_frames,num_verts,frame_delay )

  for(i=0;i<num_frames;i++) {
    for(j=1;j<=num_verts;j++) {
      x = data[j,"x"];
      y = data[j,"y"];
      z = data[j,"z"];
      flags = data[j,"flags"]

      red = green = blue = 255

      rotx(0.4);
      roty(i * (pi2 / (num_frames-1)));

      printf("%d %f %f %f %02x%02x%02x\n",flags,x,y,z,blue,green,red);
    }
  }
}

function rotx(angle) {
  y1 = y
  y =  cos(angle) * y1 + sin(angle) * z
  z = -sin(angle) * y1 + cos(angle) * z
}

function roty(angle) {
  z1 = z
  z =  cos(angle)*z1 + sin(angle) * x
  x = -sin(angle)* z1 + cos(angle) * x
}

function rotz(angle) {
  x1 = x
  x =  cos(angle) * x1 + sin(angle) * y
  y = -sin(angle) * x1 + cos(angle) * y
}

function scale(value) {
  x = x * value;
  y = y * value;
  z = z * value;
}
