// Persistence of Vision Ray Tracer Scene Description File
// File: ?.pov
// Vers: 3.5
// Desc: Basic Scene Example
// Date: mm/dd/yy
// Auth: ?
//
/*script
     start with "tunnel view", now wave
     transition to exterior view
     turn on wave
     transition back to "tunnel wave"
     turn off wave
*/
#version 3.5;

#include "colors.inc" 
#include "mrg_misc3.inc"
//transitions  do these as actual seconds
#declare t1=.5;  //move to outside
#declare dt1=3.0;
#declare t2=5;  //wave "turnon"
#declare dt2=.25;//wave turnon risetime
#declare t3=8;  //move back inside
#declare dt3=3.0;
#declare t4=14.5;  //turn wave off
#declare dt4=.25;


#declare lclock=clock+0;
#declare tr1=trans((lclock-t1)/dt1);
#declare tr3=trans((lclock-t3)/dt3);
//pulse shape for wave turn on/off
#declare pls=function(tt) {trans((tt-t2)/dt2)-trans((tt-t4)/dt4) }


global_settings {
  assumed_gamma 1.0
}

// ----------------------------------------
#declare coutsidecp=<0.0, 2, -15>;
#declare coutsidela=<-12, 0.0,  0.0>;
#declare cinsidecp=<0.0, 0, 0>;
#declare coutsidela=<-12, 0.0,  0.0>;
#declare cpos=coutsidecp*(tr1-tr3)+ cinsidecp*(1-tr1+tr3);
camera {
  location  cpos
  direction 1.5*z
  right     x*image_width/image_height
  look_at   <-12, 0.0,  0.0>
}


light_source {
  <0, 0, 0>            // light's position (translated below)
  color rgb <1, 1, 1>  // light's color
  translate <-30, 30, -30>
}

// ----------------------------------------
#declare Rorb=.075;
#declare orb=sphere{0,Rorb
     texture { 
           pigment { color rgb <.2,.2,.9> } 
           finish{ambient .3 diffuse .5 phong .25}
     } 
     no_shadow no_reflection
}
#declare gorb=sphere{0,Rorb*.98
     texture { 
           pigment { color rgbt <.2,.2,.9,.85> } 
           finish{ambient .3 diffuse .5 phong .25}
     } 
     no_shadow no_reflection

}
#declare loopR=.8;
#declare wavelength=10;
#declare freq=1;
#declare wvel=wavelength*freq;
#declare womega=freq*2*pi;
#declare f_ez=function(xx,tt) {cos(2*pi*xx/wavelength-womega*tt)*pls(tt-xx/wvel)}
#declare amplitude=.4*loopR;                

#declare ii=0;
#declare gcirc= union{
     #while(ii < 8)
          #object {gorb translate loopR*<0,sin(ii*2*pi/8),cos(ii*2*pi/8)>}
          #declare ii=ii+1;
     
     #end
}
#macro looper(ey,ez)
     #local il=0;
     union{
     #while(il < 8)
          #object {orb translate loopR*<0,ey*sin(il*2*pi/8),ez*cos(il*2*pi/8)>}
          #local il=il+1;
     
     #end
     }
#end

#declare dx=2;//ring spacing
#declare ii=0;
#declare nloops=90;
#while(ii < nloops)
     #declare xn= dx*(ii-nloops/2);
     #declare ey=1+amplitude*f_ez(xn,lclock);
     #declare ez=1-amplitude*f_ez(xn,lclock);
     #object {looper(ey,ez) translate dx*x*(ii-nloops/2)}
     torus { loopR, 0.02 rotate z*90 translate dx*x*(ii-nloops/2)
          texture { 
                pigment { color rgb <.7,.0,.7> } 
                finish{ambient .3 diffuse .5 phong .25}
          } 
          no_shadow no_reflection
          scale <1,ey,ez>
      }
     #declare ii=ii+1;

#end

#declare ii=0;
#declare nloops=30;
#while(ii < nloops)
     #object {gcirc translate 2*x*(ii-nloops/2)}
     #declare xn= dx*(ii-nloops/2);
     torus { loopR, 0.015 rotate z*90 translate dx*x*(ii-nloops/2)
          texture { 
                pigment { color rgbt <.9,.5,.9,.85> } 
                finish{ambient .3 diffuse .5 phong .25}
          } 
          no_shadow no_reflection
      }
     #declare ii=ii+1;

#end
/**/

#declare dx=.1;

#declare xn =-90;
#while(xn<=90)
     cylinder{<xn,loopR*(1+amplitude*f_ez(xn,lclock)),0>,<xn+dx,loopR*(1+amplitude*f_ez(xn+dx,lclock)),0>,Rorb*.25
          texture { 
                pigment { color rgb <.9,.2,.2> } 
                finish{ambient .3 diffuse .5 phong .25}
          } 
     no_shadow no_reflection
     
     }

#declare xn=xn+dx;
#end         



