#include "colors.inc" #include "math.inc" global_settings { assumed_gamma 1.0 ambient_light rgb <1,1,1> max_trace_level 10} #declare ltime =clock+.250; #declare camera_scale=300; camera { // location <8, 15 , 15> location camera_scale*<3, 2, -12> look_at <0, 0, 0> angle 2.5/camera_scale } #declare Etexture= texture{pigment { color rgbt <.8,.1,.1,.0> } finish{ambient .9 diffuse .5}}; #declare Btexture= texture {pigment { color rgbt <.1,.1,.8,0> } finish{ambient .9 diffuse .5}} ; #declare wavelength=1; //length of one cycle #declare waveheight=wavelength/10; //amplitude of wave #declare Ea = 0*waveheight; #declare Eb = waveheight; #declare k_wave = 2*pi/wavelength; #declare Eb_phase = 1*pi/2; #declare Ex = function(tt,z_dist) { Ea*sin(k_wave*z_dist-2*pi*tt) } #declare Ey = function(tt,z_dist) { Eb*sin(k_wave*z_dist-2*pi*tt-Eb_phase) } //By=-Ex and Bx=Ey to propogate in _this_ LH coord sys #declare num_sect_per_wave=60; //number of sections used to wave #declare z_wave_start = -10*wavelength; #declare z_wave_end = 10*wavelength; //draw the E wave section #declare znow=z_wave_start; #declare dz = wavelength/45; #declare p1=; union{ #while(znow; cylinder { p1, p2,.00125 } #declare p1=p2; #end texture{Etexture} } //draw the B wave section #declare znow=z_wave_start; #declare dz = wavelength/45; #declare p1=vrotate(,-z*90); union{ #while(znow,-z*90); cylinder { p1, p2,.00125 } #declare p1=p2; #end texture{Btexture} } //field arrow #declare num_arrows = 12;//number of arrows per wavelength, but zeroes will be skipped #declare pt=0; #declare arrow_cap_height=.2*waveheight; #declare arrow_width=.01*waveheight; #declare arrow_cap_width=3*arrow_width; //E arrows #declare znow=z_wave_start; #declare dz = wavelength/num_arrows; union{ #while(znow-p1; #declare dpr=vnormalize(dp)*(vlength(dp)-arrow_cap_height); #if(vlength(dp)>.2*waveheight) cylinder { p1, p1+dpr,arrow_width } cone{p1+dpr,arrow_cap_width,p1+dp,0} #end #end texture{Etexture} } //B arrows #declare znow=z_wave_start; #declare dz = wavelength/num_arrows; union{ #while(znow,-z*90)-p1; #declare dpr=vnormalize(dp)*(vlength(dp)-arrow_cap_height); #if(vlength(dp)>.2*waveheight) cylinder { p1, p1+dpr,arrow_width } cone{p1+dpr,arrow_cap_width,p1+dp,0} #end #end texture{Btexture} } #declare axis = cylinder{-0*z,+z,.00225 scale 20*wavelength*z+x+y pigment{color rgb <1,1,1>} finish{ambient 1}} union{ object{axis} object{axis rotate y*180} object{axis rotate +y*90} object{axis rotate -x*90} } //field at origin #declare E_arrow_cap_height=.2*waveheight; #declare E_arrow_width=.025*waveheight; #declare E_arrow_cap_width=3*E_arrow_width; #declare znow = 0; //E field #declare Enow=; #declare Enowr=vnormalize(Enow)*(vlength(Enow)-E_arrow_cap_height); #if(vlength(Enow)>E_arrow_cap_height) union{ cylinder { 0, Enowr,E_arrow_width } cone{Enowr,E_arrow_cap_width,Enow,0} texture{Etexture} } #end //B field #declare Enow=vrotate(,-z*90); #declare Enowr=vnormalize(Enow)*(vlength(Enow)-E_arrow_cap_height); #if(vlength(Enow)>E_arrow_cap_height) union{ cylinder { 0, Enowr,E_arrow_width } cone{Enowr,E_arrow_cap_width,Enow,0} texture{Btexture} } #end //polarization ellipse #declare ttime=0; #declare dt=1/60; #declare znow=0; #declare p1=; union{ #while (ttime<1) #declare ttime=ttime+dt; #declare p2=; cylinder { p1, p2,.00125} #declare p1=p2; #end texture {pigment { color rgbt <.1,.7,.1,.4> } finish{ambient .5 diffuse .2}} }