// This work is licensed under the Creative Commons Attribution-ShareAlike 3.0 Unported License.
// To view a copy of this license, visit http://creativecommons.org/licenses/by-sa/3.0/ or send a
// letter to Creative Commons, 444 Castro Street, Suite 900, Mountain View, California, 94041, USA.

// Persistence of Vision Raytracer Scene Description File
// File: i_internal.pov
// Date: 11-04-2001
// Author: RenŽ Smellenbergh
// Demo: showing all internal functions of the "functions.inc" to be used in isosurfaces
// This scene uses the clock to switch between functions.
// Set "initial frame" to 1 and "final frame" to 78
// Using the "subset start" and "subset end" allows to choose the desired frames
//    example: all frames: start 1, end 78
//                   frame 14 (cushion): start 14, end 14
//
// -w320 -h240 +kfi1 +kff78
// -w800 -h600 +a0.3 +kfi1 +kff78

#version 3.7;

#if (clock_on = 0)
	#warning " This demo was designed to be used with the clock: \n please read the comments in the scene's header"#end
#include "functions.inc"
#declare AreaLightOn = off;	//Specify if you want soft shadows (slower!) or not
global_settings {
  assumed_gamma 1.8 
	noise_generator 2
}
camera{  
	location <0, 0, -40>
        right     x*image_width/image_height
	look_at <0, 0, 0>
	angle 20
}
light_source {
	<1000, 1000, -1200> rgb 1.3
	#if (AreaLightOn=yes)
		area_light <30,0,0>, <0,30,0>, 6, 6
		adaptive 1
		jitter
		orient circular
	#end
}
light_source { <0, 0, -40> rgb 0.5 shadowless }	//Fill in light
background { color red 0.184314 green 0.309804 blue 0.309804 }
#declare IsoTexture =
texture { pigment { rgb <1.0, 0.8, 0.5> } finish { phong 0.6 phong_size 250 } }
#declare ContTexture =
texture { pigment { rgb 0.65 } finish { ambient 0.35 phong 1.0  phong_size 40 } }
//***  FRAME 1  ***************************************************
#if ( frame_number = 1 )
	//** f_algbr_cyl1 : lathe form  ************************
	isosurface {
		function  { f_algbr_cyl1(x,y,z,1, 1.5, 1, 0, 0) }
			//P0= Field Strength
			//P1= Field limit
			//P2= SOR switch
			//P3= SOR offset
			//P4= SOR angle
		contained_by { sphere { 0,1.1} }
		max_gradient 1.5
		texture { IsoTexture }
		no_shadow
		scale 3  rotate x*-25 translate <3.5, -1, 0>
	}
	//** f_algbr_cyl1 : extruded form  ************************
	intersection {
		isosurface {
			function  { f_algbr_cyl1(x,y,z,1, 1.5, 0, 0, 0) }
				//P0= Field Strength
				//P1= Field limit
				//P2= SOR switch
				//P3= SOR offset
				//P4= SOR angle
			contained_by { box { <-1.05, -0.4, -0.01>, <1.05, 0.4, 3> } }
			max_gradient 1.2
			texture { IsoTexture }
			no_shadow
		}
		box { <-1.05, -0.4, -0.01>*0.9999, <1.05, 0.4, 3>*0.9999  texture { ContTexture } }
		scale 3  rotate x*-10 translate <-3, -1, 0> 
	}
#end
//***  FRAME 2  ***************************************************
#if ( frame_number = 2 )
	//** f_algbr_cyl2 : lathe form  ************************
	isosurface {
		function  { -(f_algbr_cyl2(x,y,z,0.3, 5, 1, 0, 0)) }
			//P0= Field Strength
			//P1= Field limit
			//P2= SOR switch
			//P3= SOR offset
			//P4= SOR angle
		contained_by { box { <-1.6, -0.01, -1.6>, <1.6, 2.4, 1.6> } }
		max_gradient 9
		texture { IsoTexture }
		no_shadow
		scale 1.9  rotate x*-15 translate <3.2, -4, 0>
	}
	//** f_algbr_cyl2 : extruded form  ************************
	intersection {
		isosurface {
			function  { f_algbr_cyl2(x,y,z,-0.3, 5, 0, 0, 0) }
				//P0= Field Strength
				//P1= Field limit
				//P2= SOR switch
				//P3= SOR offset
				//P4= SOR angle
			accuracy  0.0001
			contained_by { box { <-1.6, -0.01, -0.01>, <1.6, 2.4, 3> } }
			max_gradient 5.4
			texture { IsoTexture }
			no_shadow
		}
		box { <-1.6, -0.01, -0.01>*0.9999, <1.6, 2.4, 3>*0.9999  texture { ContTexture } }
		scale 1.9  rotate x*-15 translate <-3.2, -4, 0>
	}
#end
//***  FRAME 3  ***************************************************
#if ( frame_number = 3 )
	//** f_algbr_cyl3 : lathe form  ************************
	isosurface {
		function  { f_algbr_cyl3(x,y,z,-1, 3, 1, 0, 0) }
			//P0= Field Strength
			//P1= Field limit
			//P2= SOR switch
			//P3= SOR offset
			//P4= SOR angle
		contained_by { box { <-1.05, -0.01, -1.05>, <1.05, 1.3, 1.05> } }
		max_gradient 6.5
		texture { IsoTexture }
		no_shadow
		scale 3.2  rotate x*-20  translate <2.7, -3.5, 0>
	}
	//** f_algbr_cyl3 : extruded form  ************************
	#declare LCorner = <-1.05, -0.01, -0.01>;  #declare RCorner = <1.05, 1.3, 3> ;
	intersection {
		isosurface {
			function  { f_algbr_cyl3(x,y,z,-1, 3, 0, 0, 0)}
				//P0= Field Strength
				//P1= Field limit
				//P2= SOR switch
				//P3= SOR offset
				//P4= SOR angle
			contained_by { box { LCorner, RCorner  } }
			max_gradient 2
			texture { IsoTexture }
			no_shadow
		}
		box { LCorner*0.9999, RCorner*0.9999  texture { ContTexture } }
		scale 3.2  rotate y*-5  rotate x*-10  translate <-4.8, -3.5, 0>
	}
	light_source { <-10, 4, -0> rgb 0.5 shadowless }
#end
//***  FRAME 4  ***************************************************
#if ( frame_number = 4 )
	//** f_algbr_cyl4 : lathe form  ************************
	isosurface {
		function  { f_algbr_cyl4(x,y,z, -0.4, 5, 1, 0, 0) }
			//P0= Field Strength
			//P1= Field limit
			//P2= SOR switch
			//P3= SOR offset
			//P4= SOR angle
		contained_by { sphere { 0, 1.2 } }
		max_gradient 7.1
		texture { IsoTexture }
		no_shadow
		scale 3.3  rotate x*-10  translate <3.5, -0.8, 0>
	}
	//** f_algbr_cyl4 : extruded form  ************************
	#declare LCorner = <-0.9, -0.55, -0.01>;  #declare RCorner = <0.9, 1.0, 6>;
	intersection {
		isosurface {
			function  { f_algbr_cyl4(x,y,z, -0.4, 5, 0, 0, 0) }
				//P0= Field Strength
				//P1= Field limit
				//P2= SOR switch
				//P3= SOR offset
				//P4= SOR angle
			contained_by { box { LCorner, RCorner } }
			max_gradient 4
			texture { IsoTexture }
			no_shadow
		}
		box { LCorner*0.9999, RCorner*0.9999  texture { ContTexture } }
		scale 3.3  translate <-3.3, -0.8, 0>
	}
#end
//***  FRAME 5  ***************************************************
#if ( frame_number = 5 )
isosurface {
	function  { f_bicorn(x,y,z, -0.01, 3) }
		//P0= Field strength
		//P1= Y Scale (inverse). The surface is always the same shape. Setting the scale to 1 gives
		//			a surface with a radius of about 1 unit
	contained_by { sphere { 0, 3 } }
	max_gradient 5.0
	texture { IsoTexture }
	no_shadow
	scale 1.5  rotate x*-20
}
#end
//***  FRAME 6  ***************************************************
#if ( frame_number = 6 )
isosurface {
	function  { f_bifolia(x,y,z, -1, 3) }
		//P0= Field Strength
		//P1= Scale. Setting the scale to 3 gives a surface with a radius of about 1 unit
	contained_by { box { <-1.0, -0.01, -1.0>, <1.0, 0.8, 1.0> } }
	max_gradient 7.3
	texture { IsoTexture }
	no_shadow
	scale 4.5  rotate x*-20
}
#end
//***  FRAME 7  ***************************************************
#if ( frame_number = 7 )
	#declare LCorner = <-1.9, -1.3, -1.3>;  #declare RCorner = <1.8, 1.3, 1.3>;
	isosurface {
		function  {  f_blob(x,y,z, 1.4, 1, 0.8, 1.2, 1) }
			//P0= X distance between the 2 components
			//P1= Strength of component 1
			//P2= Radius component 1 (inv)
			//P3= Strength of component 2
			//P4= Radius component 2 (inv)
		threshold  -0.3
		contained_by { box { LCorner, RCorner } }
		max_gradient 1.8
		texture { IsoTexture }
		no_shadow
		scale 4
	}
#end
	
	
//***  FRAME 8  ***************************************************
#if ( frame_number = 8 )
	#declare LCorner = <-0.5, -0.5, -0.5>;  #declare RCorner = <1.4, 0.5, 0.5>;
	isosurface {
		function  { f_blob2(x,y,z, 1, 1/0.2, 2, 1) }
			//P0= Separation (One comp at origin)
			//P1= Size (inv)
			//P2= Strength
			//P3= Threshold
		contained_by { box { LCorner, RCorner } }
		max_gradient 3.9
		texture { IsoTexture }
		no_shadow
		scale 7  translate x*-3.5
	}
#end	//frame_number = 51
//***  FRAME 9  ***************************************************
#if ( frame_number = 9 )
isosurface {
	function  { f_boy_surface(x,y,z, -0.001, 0.01) }
		//P0= Field Strength. Set extremely low to avoid that the shape breaks up.
		//P1= Scale. The surface is always the same shape.
	contained_by { box { <-1.0, -1.45, -0.1>, <1.5, 1.2, 2.2> } }
	max_gradient 2.0
	texture { IsoTexture }
	no_shadow
	scale 3  rotate y*15  rotate x*-20
}
#end
//***  FRAME 10  ***************************************************
#if ( frame_number = 10 )
	#declare LCorner = <-1.0, -0.5, -0.55>;  #declare RCorner = <1.0, 0.6, 1.1>;
	isosurface {
		function  { f_comma(x,y,z, 1) }
			//P0= size
		contained_by { box { LCorner, RCorner } }
		max_gradient 1.4
		texture { IsoTexture }
		scale 5  rotate y*-30  rotate x*-35  translate y*-1.8
	}
#end
//***  FRAME 11  ***************************************************
#if ( frame_number = 11 )
	#declare Radius = 2.4;
	isosurface {
		function  { f_cross_ellipsoids(x,y,z, 0.05, 8, 8, 1) }
			//P0= Eccentricity
			//P1= Size (inv)
			//P2= Diameter
			//P3= Threshold
		contained_by { sphere { 0, Radius } }
		max_gradient 12
		texture { IsoTexture }
		no_shadow
		scale 2  rotate y*25  rotate x*-20
	}
#end
//***  FRAME 12  ***************************************************
#if ( frame_number = 12 )
	#declare LCorner = <-3.2, -0.1, -2.5>;  #declare RCorner = <3.2, 2, 2.5>;
	intersection {
		isosurface {
			function  { f_crossed_trough(x,y,z, -0.05) }
				//P0= Field Strength
			contained_by { box { LCorner, RCorner } }
			max_gradient 0.5
			texture { IsoTexture }
			no_shadow
		}
		box { LCorner*0.9999, RCorner*0.9999  texture { ContTexture } }
		scale 1.8  rotate x*-90
	}
#end
//***  FRAME 13  ***************************************************
#if ( frame_number = 13 )
	#declare Radius = 8;
	intersection {
		isosurface {
			function  { f_cubic_saddle(x,y,z, -0.5) }
				//P0= Field Strength
			contained_by { sphere { 0, Radius } }
			max_gradient 38.1
			texture { IsoTexture }
			no_shadow
		}
		sphere { 0, Radius-0.00001  texture { ContTexture } }
		scale 0.8  rotate z*135  rotate x*-20  translate y*1.2
	}
#end
//***  FRAME 14  ***************************************************
#if ( frame_number = 14 )
isosurface {
	function  { f_cushion(x,y,z, -0.25) }
		//P0= Field Strength
	contained_by { box { <-1.1, -1.3, -0.45>, <1.1, 1.3, 1.2> } }
	max_gradient 2.9
	texture { IsoTexture }
	no_shadow
	scale 3  rotate y*-145
}
#end
//***  FRAME 15  ***************************************************
#if ( frame_number = 15 )
isosurface {
	function  { f_devils_curve(x,y,z, -0.2) }
		//P0= Field Strength
	contained_by { box { <-1.2, -1.2, -1.2>, <1.2, 1.2, 1.2> } }
	max_gradient 2.5
	texture { IsoTexture }
	no_shadow
	scale 4  rotate x*5
}
#end
//***  FRAME 16  ***************************************************
#if ( frame_number = 16 )
	//**  f_devils_curve_2d  : lathe form  ***********************************
	isosurface {
		function  { f_devils_curve_2d(x,y,z, -1, 0.25, 0.3, 1, 0, 0) }
			//P0= Field Strength
			//P1= X factor. The X and Y factors control the size of the central feature
			//P2= Y factor
			//			If the X factor is slightly stronger than the Y factor, then the side pieces
			//			are linked to the central piece by a horizontal bridge at each corner.
			//			If the Y factor is slightly greater than the X factor, then there is a vertical
			//			gap between the side pieces and the central piece at each corner.
			//			If the X and Y factors are equal each of the four corners meets at a point.
			//P3= SOR switch
			//P4= SOR offset
			//P5= SOR angle
		contained_by { box { <-0.7, -0.8, -0.8>, <0.7, 0.7, 0.7> } }
		max_gradient 3.3
		texture { IsoTexture }
		no_shadow
		scale 4.2  rotate x*-2 translate <3.3, -0.5, 0>
	}
	//**  f_devils_curve_2d  : extruded form  **********************************
	#declare LCorner = <-0.7, -0.8, -0.01>;  #declare RCorner = <0.7, 0.7, 6>;
	intersection {
		isosurface {
			function  { f_devils_curve_2d(x,y,z, -1, 0.25, 0.3, 0, 0, 0) }
				//P0= Field Strength
				//P1= X factor. The X and Y factors control the size of the central feature
				//P2= Y factor
				//			If the X factor is slightly stronger than the Y factor, then the side pieces
				//			are linked to the central piece by a horizontal bridge at each corner.
				//			If the Y factor is slightly greater than the X factor, then there is a vertical
				//			gap between the side pieces and the central piece at each corner.
				//			If the X and Y factors are equal each of the four corners meets at a point.
				//P3= SOR switch
				//P4= SOR offset
				//P5= SOR angle
			contained_by { box { LCorner, RCorner } }
			max_gradient 1.5
			texture { IsoTexture }
			no_shadow
		}
		box { LCorner*0.9999, RCorner*0.9999  texture { ContTexture } }
		scale 4.2  rotate x*-2 translate <-3.3, -0.5, 0>
		no_shadow
	}
#end
//***  FRAME 17  ***************************************************
#if ( frame_number = 17 )
isosurface {
	function  { f_dupin_cyclid(x,y,z,-.05, 0.27, 0.04, 0.55, 0.0, 1.0) }
		//P0= Field Strength
		//P1= Major radius of torus
		//P2= Minor radius of torus
		//P3= X displacement of torus
		//P4= Y displacement of torus
		//P5= radius of inversion
	contained_by { box { <1.0, -0.6, -1.6>, <4.3, 0.6, 1.6> } }
	max_gradient 2.1
	texture { IsoTexture }
	no_shadow
	scale 1.5  rotate x*-90
}
#end
//***  FRAME 18  ***************************************************
#if ( frame_number = 18 )
	#declare Radius = 1.0;
	isosurface {
		function  { f_ellipsoid(x,y,z, 1/0.95, 1/0.3, 1/0.95) }
			//P0= X scale (inv)
			//P1= Y scale (inv)
			//P2= Z scale (inv)
		threshold  1
		contained_by { sphere { 0, Radius } }
		max_gradient 2.7
		texture { IsoTexture }
		no_shadow
		scale 5.5  rotate x*-25  translate y*-1
	}
#end
//***  FRAME 19  ***************************************************
#if ( frame_number = 19 )
isosurface {
	function  { f_enneper(x,y,z, -0.1) }
		//P0= Field Strength
	contained_by { box { <-3.5, -3.5, -3.8>, <3.5, 3.5, -0.25> } }
	max_gradient 85
	texture { IsoTexture }
	no_shadow
	scale 1.1  rotate y*15
}
#end
//***  FRAME 20  ***************************************************
#if ( frame_number = 20 )
	#declare Radius = 1.6;
	isosurface {
		function  { f_flange_cover(x,y,z, 0.01, 35, 1.5, 1.2) }
			//P0= Spikiness (1= sph; <= spikes)
			//P1= Size (inv)
			//P2= Flange (1= no; >=flanges)
			//P3= Threshold
		contained_by { sphere { 0, Radius } }
		max_gradient 11
		texture { IsoTexture }
		no_shadow
		scale 3.45  rotate y*15  rotate x*-30  translate y*-0.1
	}
#end
//***  FRAME 21  ***************************************************
#if ( frame_number = 21)
	#declare LCorner = <-0.0, -0.9, -0.9>;  #declare RCorner = <0.8, 0.9, 0.9>;
	intersection {
		isosurface {
			function  { f_folium_surface(x,y,z, -0.02, 15, 15) }
				//P0= Field Strength
				//P1= Neck width factor - the larger you set this, the narrower the neck where the paraboloid meets the plane
				//P2= Divergence - the higher the value, the wider the paraboloid gets
			contained_by { box { LCorner, RCorner  } }
			max_gradient 1.3
			texture { IsoTexture }
			no_shadow
		}
		box { LCorner*0.9999, RCorner*0.9999  texture { ContTexture } }
		scale 5.5  rotate z*90  rotate x*-25  translate y*-1.5
		no_shadow
	}
#end
//***  FRAME 22  ***************************************************
#if ( frame_number = 22)
	//**  f_folium_surface_2d  : lathe form  **************************************
	#declare LCorner = <-0.7, -0.8, -0.7>;  #declare RCorner = <0.7, 0.8, 0.7>;
	intersection {
		isosurface {
			function  { f_folium_surface_2d(x,y,z, -0.01, 12, 20, 1, 0, 0) }
				//P0= Field Strength
				//P1= Neck width factor - same as 3d surface if you're revolving it around the Y axis
				//P2= Divergence - same as 3d surface if you're revolving it around the Y axis
				//P3= SOR switch
				//P4= SOR offset
				//P5= SOR angle
			contained_by { box { LCorner, RCorner } }
			max_gradient 0.5
			texture { IsoTexture }
			no_shadow
		}
		box { LCorner*0.9999, RCorner*0.9999  texture { ContTexture } }
		scale 5  rotate x*3  translate <2.5, -0.5, 0>
		no_shadow
	}
	//**  f_folium_surface_2d  : extruded form  **************************************
	#declare LCorner = <-0.7, -0.8, -0.01>;  #declare RCorner = <0.7, 0.8, 3>;
	intersection {
		isosurface {
			function  { f_folium_surface_2d(x,y,z, -0.01, 12, 20, 0, 0, 0) }
				//P0= Field Strength
				//P1= Neck width factor - same as 3d surface if you're revolving it around the Y axis
				//P2= Divergence - same as 3d surface if you're revolving it around the Y axis
				//P3= SOR switch
				//P4= SOR offset
				//P5= SOR angle
			contained_by { box { LCorner, RCorner } }
			max_gradient 0.3
			texture { IsoTexture }
		}
		box { LCorner*0.9999, RCorner*0.9999  texture { ContTexture } }
		scale 5  rotate x*3  translate <-5.5, -0.5, 0>
		no_shadow
	}
#end
//***  FRAME 23  ***************************************************
#if ( frame_number = 23 )
isosurface {
	function  { f_glob(x,y,z, -1) }
		//P0= Field Strength
	contained_by { box { <-1.0, -1.5, -1.6>, <1.5, 1.5, 1.6> } }
	max_gradient 6.5
	texture { IsoTexture }
	no_shadow
	scale 3.7  rotate z*90  rotate x*10
}
#end
//***  FRAME 24  ***************************************************
#if ( frame_number = 24 )
	isosurface {
		function  { f_heart(x,y,z, -0.001) }
			//P0= Field Strength
		contained_by { box { <-0.8, -1.2, -1.1>, <0.8, 1.2, 1.3> } }
		max_gradient 0.1
		texture { IsoTexture }
		no_shadow
		scale 3  rotate y*-90  rotate z*-90
	}
#end
//***  FRAME 25  ***************************************************
#if ( frame_number = 25 )
	#declare LCorner = <-3.7, -1.7, -3.7>;  #declare RCorner = <3.7, 1.7, 3.7>;
	isosurface {
		function  { f_helical_torus(x,y,z, 2, 7, 1, 0.1, 1, 0.5, 1, 6, 2.0, 0) }
			//P0= Major radius
			//P1= Nr of winding loops
			//P2= Twistness winding
			//P3= Flatness of winding?
			//P4= Threshold
			//P5= Negative minor radius?
			//P6= Another fatness of winding control
			//P7= Groove period
			//P8= Groove amplitude
			//P9= Groove phase
		contained_by { box { LCorner, RCorner } }
		max_gradient 13
		texture { IsoTexture }
		no_shadow
		scale 1.7  rotate x*-45
	}
#end
//***  FRAME 26  ***************************************************
#if ( frame_number = 26 )
	#declare LCorner = <-1.5, -2.9, -1.5>;  #declare RCorner = <1.5, 2.9, 1.5>;
	isosurface {
		function { f_helix1(x,y,z, 1, 8, 0.3, 0.9, 0.6, 0.2, 0) }
			//P0= number of helixes
			//P1= frequency
			//P2= minor radius
			//P3= major radius
			//P4= Y scale cross section
			//P5= cross section
			//P6= cross section rotation (¡)
		contained_by { box { LCorner, RCorner } }
		max_gradient 1.5
		texture { IsoTexture }
		no_shadow
		 scale 1.9  rotate z*-54
	}
#end
//***  FRAME 27  ***************************************************
#if ( frame_number = 27 )
	#declare LCorner = <-1, -2.9, -1>;  #declare RCorner = <1, 2.9, 1>;
	isosurface {
		function { f_helix2(x,y,z, 0, 8, 0.35, 0.4, 0, 0.5, 0) }
			//P0= not used
			//P1= frequency
			//P2= minor radius
			//P3= major radius
			//P4= not used
			//P5= cross section
			//P6= cross section rotation (¡)
		contained_by { box { LCorner, RCorner } }
		max_gradient 4.3
		texture { IsoTexture }
		no_shadow
		scale 2.2  rotate z*-54
	}
#end
//***  FRAME 28  ***************************************************
#if ( frame_number = 28 )
	#declare LCorner = <-4, -4, -4>;  #declare RCorner = <4, 4, 4>;
	isosurface {
		function { f_hex_x(x,y,z, 1) } 
			//P0= not used
		threshold 0.6
		contained_by { box { LCorner, RCorner } }
		max_gradient 1
		texture { IsoTexture }
		no_shadow
	}
#end
//***  FRAME 29  ***************************************************
#if ( frame_number = 29 )
	#declare LCorner = <-4, -4, -4>;  #declare RCorner = <4, 4, 4>;
	isosurface {
		function { f_hex_y(x,y,z, 1) } 
			//P0= not used
		threshold 0.1
		contained_by { box { LCorner, RCorner } }
		max_gradient 1
		texture { IsoTexture }
		no_shadow
	}
#end
//***  FRAME 30  ***************************************************
#if ( frame_number = 30 )
	#declare Radius = 1.5;
	intersection {
		isosurface {
			function { f_hetero_mf(x,y,z, 1.1, 2.05, 15, 0.26, 0.01, 1) }
				//P0= H
				//P1= lacunarity
				//P2= octaves
				//P3= offset
				//P4= T
				//P5= noise generator type
			contained_by { sphere { 0, Radius } }
			max_gradient 5.5
			texture { IsoTexture }
			no_shadow
		}
		sphere { 0, Radius-0.00001  texture { ContTexture } }
		scale 4.3  translate y*-1.7
	}
#end
//***  FRAME 31  ***************************************************
#if ( frame_number = 31 )
isosurface {
	function  { f_hunt_surface(x,y,z, -0.01) }
		//P0= Field Strength
	contained_by { sphere { 0, 3.8 } }
	max_gradient 84
	texture { IsoTexture }
	no_shadow
	scale 1.2  rotate y*-45
}
#end
//***  FRAME 32  ***************************************************
#if ( frame_number = 32 )
isosurface {
	function  { f_hyperbolic_torus(x,y,z, -0.005, 1, 0.6) }
		//P0= Field Strength
		//P1= Major radius: separation between the centres of the tubes at the closest point
		//P2= Minor radius: thickness of the tubes at the closest point
	contained_by { box { <-4, -0.9, -4>, <4, 0.9, 4> } }
	max_gradient 0.9
	texture { IsoTexture }
	no_shadow
	scale 1.5  rotate x*-90
}
#end
//***  FRAME 33  ***************************************************
#if ( frame_number = 33 )
	#declare Radius = 0.9;
	isosurface {
		function  { f_isect_ellipsoids(x,y,z, 5, 1, 18, 1) }
			//P0= Eccentricity
			//P1= Size (inv)
			//P2= Diameter
			//P3= Threshold
		contained_by { sphere { 0, Radius } }
		max_gradient 20
		texture { IsoTexture }
		scale 5  rotate y*25  rotate x*-20
		no_shadow
	}
#end
//***  FRAME 34  ***************************************************
#declare ContainerOn = off;
#declare SphereOn = 0;
#if ( frame_number = 34 )
	#declare LCorner = <-1.0, -1.5, -1.5>;  #declare RCorner = <1.0, 1.5, 1.5>;
	intersection {
		isosurface {
			function  { f_kampyle_of_eudoxus(x,y,z, -0.001, 0.01, 2) }
				//P0= Field Strength
				//P1= Dimple: When zero, the two dimples punch right through and meet at the centre. Non-zero values give less dimpling
				//P2= Closeness: Higher values make the two planes become closer
			contained_by { box { LCorner, RCorner } }
			max_gradient 0.04
			texture { IsoTexture }
			no_shadow
		}
		box { LCorner*0.9999, RCorner*0.9999  texture { ContTexture } }
		scale 3.8  rotate z*90
		no_shadow
	}
#end
//***  FRAME 35  ***************************************************
#if ( frame_number = 35 )
	//**  f_kampyle_of_eudoxus_2d  : lathe form  *****************************
	#declare LCorner = <-1.6, -1.1, -1.6>;  #declare RCorner = <1.6, 1.15, 1.6>;
	intersection {
		isosurface {
			function  { f_kampyle_of_eudoxus_2d(x,y,z, -0.001, 0, 2, 1, 0, 90) }
				//P0= Field Strength
				//P1= Dimple: When zero, the two dimples punch right through and meet at the centre. Non-zero values give less dimpling
				//P2= Closeness: Higher values make the two planes become closer
				//P3= SOR switch
				//P4= SOR offset
				//P5= SOR angle
			contained_by { box { LCorner, RCorner } }
			max_gradient 0.2
			texture { IsoTexture }
			
		}
		box { LCorner*0.9999, RCorner*0.9999  texture { ContTexture }  }
		scale 1.9  rotate x*-1  translate <3, -1, 0>
		no_shadow
	}
	//**  f_kampyle_of_eudoxus_2d  : extruded form  *****************************
	#declare LCorner = <-1.1, -1.6, -0.01>;  #declare RCorner = <1.15, 1.6, 8>;
	intersection {
		isosurface {
			function  { f_kampyle_of_eudoxus_2d(x,y,z, -0.001, 0, 2, 0, 0, 0) }
				//P0= Field Strength
				//P1= Dimple: When zero, the two dimples punch right through and meet at the centre. Non-zero values give less dimpling
				//P2= Closeness: Higher values make the two planes become closer
				//P3= SOR switch
				//P4= SOR offset
				//P5= SOR angle
			contained_by { box { LCorner, RCorner } }
			max_gradient 0.05
			texture { IsoTexture }
			no_shadow
		}
		box { LCorner*0.9999, RCorner*0.9999  texture { ContTexture } }
		scale 1.9  rotate z*90 rotate x*-1  translate <-3.6, -1, 0>
		no_shadow
	}
	light_source { <0, -1, -0.5> rgb 0.3 shadowless }
#end
//***  FRAME 36  ***************************************************
#if ( frame_number = 36 )
	isosurface {
		function  { f_klein_bottle(x,y,z, -0.0005) }
			//P0= Field strength
		contained_by { sphere { 0, 4.2 } }
		max_gradient 2.7
		texture { IsoTexture }
		no_shadow
		scale 1.3  rotate y*110  rotate x*5
	}
#end
//***  FRAME 37  ***************************************************
#if ( frame_number = 37 )
	#declare LCorner = <-7.4, -7.4, -7.4>;  #declare RCorner = <7.4, 7.4, 7.4>;
	intersection {
		isosurface {
			function  { f_kummer_surface_v1(x,y,z, -0.01) }
				//P0= Field Strength
			contained_by { box { LCorner, RCorner } }
			max_gradient 8.3
			texture { IsoTexture }
			no_shadow
		}
		box { LCorner*0.9999, RCorner*0.9999  texture { ContTexture } }
		scale 0.55  rotate y*-25
	}
#end
//***  FRAME 38  ***************************************************
#if ( frame_number = 38 )
	isosurface {
		function  { f_kummer_surface_v2(x,y,z, -0.0005, -0.3, -0.97, 0) }
			//P0= Field Strength
			//P1= Rod width (negative): Setting this parameter to larger negative values increases the diameter of the rods
			//P2= Divergence (negative): Setting this number to -1 causes the rods to become approximately cylindrical. 
			//			Larger negative values cause the rods to become fatter further from the origin
			//			Smaller negative values cause the rods to become narrower away from the origin, and have a finite length
			//P3= Influences the length of half of the rods. Changing the sign affects the other half of the rods. 0 has no effect 
		contained_by { box { -3.8, 3.8 } }
		max_gradient 0.2
		texture { IsoTexture }
		no_shadow
		scale 1.1  rotate y*25  rotate x*-5
	}
#end
//***  FRAME 39  ***************************************************
#if ( frame_number = 39 )
	isosurface {
		function  { f_lemniscate_of_gerono(x,y,z, -0.1) }
			//P0= Field Strength
		contained_by { box { <-1.05, -0.55, -0.55>, <1.05, 0.55, 0.55> } }
		max_gradient 0.3
		texture { IsoTexture }
		no_shadow
		scale 6  rotate y*15
	}
#end
//***  FRAME 40  ***************************************************
#if ( frame_number = 40 )
	//** f_ lemniscate_of_gerono_2d  : lathe form  **********************************
	#declare LCorner = <-3, -1, -3>;  #declare RCorner = <3, 1, 3>;
	isosurface {
		function  { f_lemniscate_of_gerono_2d(x,y,z, -0.1, 1, 1, 1, 2, -45) }
			//P0= Field Strength
			//P1= Size: increasing this makes the 2d curve larger and less rounded
			//P2= Width: increasing this makes the 2d curve flatter
			//P3= SOR switch
			//P4= SOR offset
			//P5= SOR angle
		contained_by { box { LCorner, RCorner } }
		max_gradient 2.8
		texture { IsoTexture }
		scale 1.4  rotate x*-15  translate <2.0, -2.4, 0>
		no_shadow
	}
	//**  f_lemniscate_of_gerono_2d  : extruded form  ************************************
	#declare LCorner = <-3, -1, -0.01>;  #declare RCorner = <3, 1, 8>;
	intersection {
		isosurface {
			function  { f_lemniscate_of_gerono_2d(x,y,z, -0.1, 1, 1, 0, 2, -45) }
				//P0= Field Strength
				//P1= Size: increasing this makes the 2d curve larger and less rounded
				//P2= Width: increasing this makes the 2d curve flatter
				//P3= SOR switch
				//P4= SOR offset
				//P5= SOR angle
			contained_by { box { LCorner, RCorner } }
			max_gradient 5
			texture { IsoTexture }
			no_shadow
		}
		box { LCorner*0.9999, RCorner*0.9999  texture { ContTexture } }
		scale 1.4  rotate z*45  rotate x*-3  translate <-4.8, -2.4, 0>
		no_shadow
	}
#end
//***  FRAME 41  ***************************************************
#if ( frame_number = 41 )
	#declare LCorner = <-1, -0.05, -1>;  #declare RCorner = <1, 0.05, 1>;
	intersection {
		isosurface {
			function { f_mesh1(x,y,z, 1/8, 1/8, 1/10, 0.01, 1/10) }
				//P0= X frequency
				//P1= Z frequency
				//P2= scale (X-Z)
				//P3= amplitude
				//P4= scale Y
			threshold  0.001
			contained_by { box { LCorner, RCorner } }
			max_gradient 0.2
			texture { IsoTexture }
			no_shadow
		}
		box { LCorner*0.9999, RCorner*0.9999  texture { ContTexture } }
		scale 6  rotate x*-30
	}
#end
//***  FRAME 42  ***************************************************
#if ( frame_number = 42 )
isosurface {
	function  { f_mitre(x,y,z, -0.5) }	
		//P0= Field Strength
	contained_by {box { <-0.4, -1, -1>, <0.4, 1, 1> }}
	max_gradient 3.1
	texture { IsoTexture }
	no_shadow
	scale 4.5  rotate y*-45
}
#end
//***  FRAME 43  ***************************************************
#if ( frame_number = 43 )
	#declare LCorner = <-10, -4, -4>;  #declare RCorner = <6, 4, 4>;
	intersection {
		isosurface {
			function  { f_nodal_cubic(x,y,z, -0.005) }
				//P0= Field Strength
			contained_by { box { LCorner, RCorner } }
			max_trace 3
			max_gradient 0.4
			texture { IsoTexture }
			no_shadow
		}
		box { LCorner*0.9999, RCorner*0.9999  texture { ContTexture } }
		scale 0.9  rotate <0, 110, 0>
		no_shadow
	}
#end
//***  FRAME 44  ***************************************************
#if ( frame_number = 44 )
isosurface {
	function  { f_odd(x,y,z, -0.1) }
		//P0= Field Strength
	contained_by { box { <-1.05, -1.3, -0.45>, <1.05, 1.3, 1.1> } }
	max_gradient 1.0
	texture { IsoTexture }
	no_shadow
	scale 3.5  rotate y*-45  translate x*0.8
}
#end
//***  FRAME 45  ***************************************************
#if ( frame_number = 45 )
isosurface {
	function  { f_ovals_of_cassini(x,y,z, -0.1, 0.4, 0.18, 6) }	
		//P0= Field strength
		//P1= Major radius - like the major radius of a torus
		//P2= Filling. Zero for a torus. With higher values the hole in the middle starts to fill up. Even higher values give an ellipsoid with a dimple
		//P3= Thickness. Higher values give plumper results
	contained_by { box { <-0.82, -0.35, -0.82>, <0.82, 0.35, 0.82> }}
	max_gradient 0.4
	texture { IsoTexture }
	no_shadow
	scale 6  rotate x*-45
}
#end
//***  FRAME 46  ***************************************************
#if ( frame_number = 46 )
isosurface {
	function  { f_paraboloid(x,y,z, -1) }
		//P0= Field Strength
	contained_by {box { <-1.4, -0.1, -1.4>, <1.4, 1.9, 1.4> }}
	max_gradient 3.2
	texture { IsoTexture }
	no_shadow
	scale 3.5  rotate x*20  translate y*-3.5
}
#end
//***  FRAME 47  ***************************************************
#if ( frame_number = 47 )
isosurface {
	function  { f_parabolic_torus(x,y,z, -0.1, 0.4, 0.5) }
		//P0= Field Strength
		//P1= Major radius
		//P2= Minor radius
	contained_by {box { <-1.4, -0.4, -0.4>, <1.4, 0.4, 1.2> } }
	max_gradient 0.7
	texture { IsoTexture }
	no_shadow
	scale 4.5  rotate x*-92  rotate y*-8  translate y*-1.6
}
#end
//***  FRAME 48  ***************************************************
#if ( frame_number = 48 )
	#declare Radius = 4;
	intersection {
		isosurface {
			function  { f_ph(x,y,z) }
			threshold 0.5
			contained_by { sphere { 0, Radius } }
			max_gradient 2
			texture { IsoTexture }
		}
		sphere { 0, Radius - 0.0001  texture { ContTexture } }
	}
#end
//***  FRAME 49  ***************************************************
#if ( frame_number = 49 )
isosurface {
	function  { f_pillow(x,y,z, 1) }
		//P0= Field Strength
	contained_by {box { <-1.2, -1.2, -1.2>, <1.2, 1.2, 1.2> }}
	max_gradient 5.9
	texture { IsoTexture }
	no_shadow
	scale 2.7  rotate y*45  rotate x*-20
}
#end
//***  FRAME 50  ***************************************************
#if ( frame_number = 50 )
isosurface {
	function  { f_piriform(x,y,z, 0.7) }
		//P0= Field Strength
	contained_by { box { <-0, -0.4, -0.4>, <1, 0.4, 0.4> } }
	max_gradient 0.9
	texture { IsoTexture }
	no_shadow
	scale 10  rotate y*-20  translate x*-4
}
#end
//***  FRAME 51  ***************************************************
#if ( frame_number = 51 )
	//**  f_piriform_2d  : lathe form  ****************************************
	#declare LCorner = <-0.4, -0.1, -0.4>;  #declare RCorner = <0.4, 1.1, 0.4>;
	isosurface {
		function  { f_piriform_2d(x,y,z, -1, 1, -1, 0.9, 1, 0, -90) }
			//P0= Field Strength
			//P1= Size factor1: increasing this makes the curve larger
			//P2= Size factor 2: making this less negative makes the curve larger but also thinner
			//P3= Flatness: increasing this makes the curve fatter
			//P4= SOR switch
			//P5= SOR offset
			//P6= SOR angle
		contained_by { box { LCorner, RCorner } }
		max_gradient 1.4
		texture { IsoTexture }
		scale 7.5  translate <3, -4.6, 0>
		no_shadow
	}
	//**  f_piriform_2d  : extruded form   ************************************
	#declare LCorner = <-0.4, -0.4, -0.01>;  #declare RCorner = <1.1, 0.4, 7>;
	intersection {
		isosurface {
			function  { f_piriform_2d(x,y,z, -1, 1, -1, 0.9, 0, 0, 0) }
				//P0= Field Strength
				//P1= Size factor1: increasing this makes the curve larger
				//P2= Size factor 2: making this less negative makes the curve larger but also thinner
				//P3= Flatness: increasing this makes the curve fatter
				//P4= SOR switch
				//P5= SOR offset
				//P6= SOR angle
			contained_by { box { LCorner, RCorner } }
			max_gradient 0.8
			texture { IsoTexture }
		}
		box { LCorner*0.9999, RCorner*0.9999  texture { ContTexture } }
		scale 7.5  rotate z*90 rotate y*1  translate <-3.3, -4.6, 0>
	}
#end
//***  FRAME 52  ***************************************************
#if ( frame_number = 52 )
	#declare LCorner = <-0.3, 0, -0.3>;  #declare RCorner = <0.3, 1, 0.3>;
	isosurface {
		function  { f_poly4(x,y,z, 0, 1, -1, 0, 0) }
			//P0= Constant
			//P1= Y coefficient
			//p2= Y2 coefficient
			//p3= Y3 coefficient
			//p4= Y4 coefficient
		contained_by { box { LCorner, RCorner } }
		max_gradient 1.4
		texture { IsoTexture }
		scale 8  translate y*-4
		no_shadow
	}
#end
//***  FRAME 53  ***************************************************
#if ( frame_number = 53 )
	#declare Radius = 4;
	intersection {
		isosurface {
			function  { f_polytubes(x,y,z, 8, -1, -1/100, -0.02, 0.1, -0.25) }
				//P0= nr of wires
				//P1= radial onset (around Y) inverse
				//P2= radial scale (around Y)
				//P3= profile shape
							//positive values = parabolish becoming sharper ith higher values
				//P4= amplitude pos/neg part of profile
				//P5= amplitude profile
			threshold 0.4
			contained_by { sphere { 0, Radius } }
			max_gradient 28
			texture { IsoTexture }
			no_shadow
		}
		sphere { 0, Radius-0.00001  texture { ContTexture } }
		scale 1.6  rotate y*2 rotate x*-18
	}
#end
//***  FRAME 54  ***************************************************
#if ( frame_number = 54 )
	#declare LCorner = <-5.5, -7.3, -5.5>;  #declare RCorner = <5.5, 7.3, 5.5>;
	isosurface {
		function  { f_quantum(x,y,z, 0) }
			//P0= Not used
		contained_by { box { LCorner, RCorner } }
		max_gradient 6
		texture { IsoTexture }
		scale 0.7  rotate x*-20
		no_shadow
	}
#end
//***  FRAME 55  ***************************************************
#if ( frame_number = 55 )
isosurface {
	function  { f_quartic_paraboloid(x,y,z, -0.01) }
		//P0= Field Strength
	contained_by {box { <-1.45, -0.1, -1.45>, <1.45, 2.5, 1.45> }}
	max_gradient 0.2
	texture { IsoTexture }
	no_shadow
	scale 3  rotate y*45  rotate x*20  translate y*-4
}
#end
//***  FRAME 56  ***************************************************
#if ( frame_number = 56 )
	#declare LCorner = <-3.5, -3.0, -3.5>;  #declare RCorner = <3.5, 3.0, 3.5>;
	intersection {
		isosurface {
			function  { f_quartic_saddle(x,y,z, 0.05) }
				//P0= Field Strength
			contained_by { box { LCorner, RCorner } }
			max_gradient 11
			texture { IsoTexture }
		}
		box { LCorner*0.9999, RCorner*0.9999  texture { ContTexture } }
		scale 1.2  rotate y*5  rotate x*-15
		no_shadow
	}
#end
//***  FRAME 57  ***************************************************
#if ( frame_number = 57 )
isosurface {
	function  { f_quartic_cylinder(x,y,z, -1, 0.8, 0.2) }
		//P0= Field Strength
		//P1= Diameter of the "bubble"
		//P2= Controls the width of the tube and the vertical scale of the "bubble"
	contained_by { box { <-0.85, -2.5, -0.85>, <0.85, 2.5, 0.85> } }
	max_gradient 8.8
	texture { IsoTexture }
	scale 2.0
	no_shadow
}
#end
//***  FRAME 58  ***************************************************
#if ( frame_number = 58 )
isosurface {
	function  { f_r(x,y,z) }
	threshold 0.7
	contained_by { sphere { 0, 0.75 } }
	max_gradient 1
	texture { IsoTexture }
	scale 5
}
#end
//***  FRAME 59  ***************************************************
#if ( frame_number = 59 )
	#declare Radius = 4;
	isosurface {
		function  { f_sphere(x,y,z, (Radius-0.5)) + (-f_ridge( x*3, y*3, z*3, 1, 3, 1, 0.2, 0, 0 )*0.9) }
			//P0= Lambda
			//P1= Octaves
			//P2= Omega
			//P3= Offset
			//P4= Ridge
			//P5= noise generator type [0,1,2,3]
		contained_by { sphere { 0, Radius*1.1 } }
		max_gradient 5
		texture { IsoTexture }
	}
#end
//***  FRAME 60  ***************************************************
#if ( frame_number = 60 )
	#declare Radius = 4;
	isosurface {
		function  { f_sphere(x,y,z, Radius-0.5) + (-f_ridged_mf( x*2, y*2, z*3, 2, 3, 1, 0.1, 1, 0 )*2) }
			//P0= H
			//P1= Lacunarity
			//P2= Octaves
			//P3= Offset
			//P4= Gain
			//P5= noise generator type [0,1,2,3]
		contained_by { sphere { 0, Radius*1.1 } }
		max_gradient 10
		texture { IsoTexture }
	}
#end
//***  FRAME 61  ***************************************************
#if ( frame_number = 61 )
	#declare LCorner = <-1.1, -1.1, -1.1>;  #declare RCorner = <1.1, 1.1, 1.1>;
	isosurface {
		function { f_rounded_box(x,y,z, 0.3, 1, 1, 1) }
			//P0= radius rounded corner
			//P1= scale x
			//P2= scale y
			//P3= scale z
		contained_by { box { LCorner, RCorner } }
		max_gradient 1
		texture { IsoTexture }
		scale 3  rotate y*-35  rotate x*-20  translate <0, 0, 0>
		no_shadow
	}
#end
//***  FRAME 62  ***************************************************
#if ( frame_number = 62 )
	#declare Radius = 1.01;
	isosurface {
		function { f_sphere(x,y,z, 1) }
			//P0= Radius
		contained_by { sphere { 0, Radius } }
		max_gradient 1.0
		texture { IsoTexture }
		scale 4
		no_shadow
	}
#end
//***  FRAME 63  ***************************************************
#if ( frame_number = 63 )
	#declare Radius = 2.5;
	isosurface {
		function  { f_spikes(x,y,z, 0.04, 5.6, -4, 0.1, 1) }
			//P0= Spikiness
			//P1= Hollowness
			//P2= Size (<0 with thresh 0)
			//P3= Roundness
			//P4= Fatness
		contained_by { sphere { 0, Radius } }
		max_gradient 11
		texture { IsoTexture }
		scale 2  rotate y*30  rotate x*-18
		no_shadow
	}
#end
//***  FRAME 64  ***************************************************
#if ( frame_number = 64 )
	#declare LCorner = <-1.2,  -0.2, -1.2>;  #declare RCorner = <1.2, 0.7, 1.2>;
	intersection {
		isosurface {
			function  { f_spikes_2d(x,y,z, 0.7, 15, 15, 2.2) }
				//P0= Height central spike
				//P1= X frequency of spikes
				//P2= Z frequency of spikes
				//P3= Height dimming from center
			accuracy  0.0001
			contained_by { box { LCorner, RCorner } }
			max_gradient 10
			texture { IsoTexture }
			no_shadow
		}
		box { LCorner*0.9999, RCorner*0.9999  texture { ContTexture } }
		scale 4.9  rotate x*-25  translate y*-0.7
	}
#end
//***  FRAME 65  ***************************************************
#if ( frame_number = 65 )
	#declare LCorner = <-1, -0.05, -1>;  #declare RCorner = <1, 0.05, 1>;
	isosurface {
		function { f_spiral(x,y,z, 0.2, 0.04, 1, 0, 0, 1) }
			//P0= distance between windings
			//P1= Y thickness
			//P2= outer diameter
			//P3= not used
			//P4= not used
			//P5= cross section shape
		contained_by { box { LCorner, RCorner } }
		max_gradient 1.3
		texture { IsoTexture }
		scale 6.3  rotate x*-30
		no_shadow
	}
#end
//***  FRAME 66  ***************************************************
#if ( frame_number = 66 )
	isosurface {
		function  { f_steiners_roman(x,y,z, -1) }
			//P0= Field Strength
		contained_by { sphere { 0, 0.6 } }
		max_gradient 0.3
		texture { IsoTexture }
		scale 8.5  rotate y*25  rotate x*-25 
		no_shadow
	}
#end
//***  FRAME 67  ***************************************************
#if ( frame_number = 67 )
	#declare Radius = 2.4;
	intersection {
		isosurface {
			function  { f_strophoid(x,y,z, -0.2, 2, 0.5, 0.9) }
				//P0= Field Strength
				//P1= Size of bulb. Larger values give larger bulbs. Negative values give a bulb on the other side of the plane
				//P2= Sharpness.
				//			When 0, the bulb is like a sphere that just touches the plane.
				//			When positive, there is a crossover point
				//			When negative the bulb simply bulges out of the plane like a pimple
				//P3= Flatness. Higher values make the top end of the bulb fatter
			contained_by { sphere { 0, 2.4 } }
			max_gradient 1.4
			texture { IsoTexture }
		}
		sphere { 0, Radius-0.00001  texture { ContTexture } }
		scale 2  rotate y*-28  rotate x*10  translate x*0.6
		no_shadow
	}
#end
//***  FRAME 68  ***************************************************
#if ( frame_number = 68 )
	//**  f_strophoid_2d  : lathe form  ***************************************
	#declare Radius = 8.5;
	isosurface {
		function  { f_strophoid_2d(x,y,z, 0.02, -8, 0.8, 0.3, 1, 0, 0) }
			//P0= Field Strength
			//P1= Size of bulb
			//			Larger values give larger bulbs
			//			Negative values give a bumb on the other side of the plane
			//P2= Sharpness
			//			When 0, the bulb is like a sphere that just touches the plane.
			//			When positive, there is a crossover point
			//			When negative the bulb simply bulges out of the plane like a pimple
			//P3= Flatness. Higher values make the top end of the bulb fatter
			//P4= SOR switch
			//P5= SOR offset
			//P6= SOR angle
		contained_by { sphere { 0, Radius } }
		max_gradient 1.4
		texture { IsoTexture }
		scale 0.4  rotate x*-10  translate <2.6, -1, 0>
	}
	//**  f_strophoid_2d  : extruded form  ***************************************
	#declare LCorner = <-1.0, -8.0, -0.01>;  #declare RCorner = <8.5, 8.0, 14>;
	intersection {
		isosurface {
			function  { f_strophoid_2d(x,y,z, 0.02, -8, 0.8, 0.3, 0, 0, 0) }
				//P0= Field Strength
				//P1= Size of bulb
				//			Larger values give larger bulbs
				//			Negative values give a bumb on the other side of the plane
				//P2= Sharpness
				//			When 0, the bulb is like a sphere that just touches the plane.
				//			When positive, there is a crossover point
				//			When negative the bulb simply bulges out of the plane like a pimple
				//P3= Flatness. Higher values make the top end of the bulb fatter
				//P4= SOR switch
				//P5= SOR offset
				//P6= SOR angle
			contained_by { box { LCorner, RCorner } }
			max_gradient 1.6
			texture { IsoTexture }
		}
		box { LCorner*0.9999, RCorner*0.9999  texture { ContTexture } }
		scale 0.4  rotate x*-10  translate <-5, -1, 0>
	}
#end
//***  FRAME 69  ***************************************************
#if ( frame_number = 69 )
	#declare Radius = 1.4;
	isosurface {
		function { -f_superellipsoid(x,y,z, 0.3, 0.5) }
			//P0= rounding NS
			//P1= rounding EW
		contained_by { sphere { 0, Radius } }
		max_gradient 0.9
		texture { IsoTexture }
		scale 3.8  rotate y*-40  rotate x*-20
		no_shadow
	}
#end
//***  FRAME 70  ***************************************************
#if ( frame_number = 70 )
	isosurface {
		function { f_sphere(x,y,z, 1) + sin(f_th(x,y,z)*20)*0.05*(1-y*y) }
		contained_by { sphere { 0, 1.1 } }
		max_gradient 1.5
		texture { IsoTexture }
		scale 4 rotate x*-35
	}
#end
//***  FRAME 71  ***************************************************
#if ( frame_number = 71 )
	#declare LCorner = <-1, -0.25, -1>;  #declare RCorner = <1, 0.25, 1>;
	isosurface {
		function { f_torus(x,y,z, 0.8, 0.2) }
			//P0= major radius
			//P1= minor radius
		contained_by { box { LCorner, RCorner } }
		max_gradient 1
		texture { IsoTexture }
		scale 5.5  rotate x*-30
		no_shadow
	}
#end
//***  FRAME 72  ***************************************************
#if ( frame_number = 72 )
isosurface {
	function  { f_torus2(x,y,z, -1, 0.4, 0.07) }
		//P0= Field Strength
		//P1= Major radius
		//P2= Minor radius
	contained_by { box {<-0.5, -0.1, -0.5>, <0.5, 0.1, 0.5> } }
	max_gradient 0.6
	texture { IsoTexture }
	scale 12  rotate x*-35
	no_shadow
}
#end
//***  FRAME 73  ***************************************************
#if ( frame_number = 73 )
	isosurface {
		function  { f_torus_gumdrop(x,y,z, -0.01) }
			//P0= Field Strength
		contained_by { sphere { 0, 2.1 } }
		max_gradient 1.1
		texture { IsoTexture }
		no_shadow
		scale 2  rotate y*18
	}
#end
//***  FRAME 74  ***************************************************
#if ( frame_number = 74 )
	#declare LCorner = <-3.3, -0.2, -2.5>;  #declare RCorner = <3.3, 3.5, 3.0>;
	intersection {
		isosurface {
			function  { f_umbrella(x,y,z, -0.2) }
				//P0= Field Strength
			contained_by { box { LCorner, RCorner } }
			max_gradient 2.6
			texture { IsoTexture }
			no_shadow
		}
		box { LCorner*0.9999, RCorner*0.9999  texture { ContTexture } }
		scale 1.5  rotate x*60  translate y*-0.7
	}
#end
//***  FRAME 75  ***************************************************
#if ( frame_number = 75 )
	#declare LCorner = <-1.8, -0.15, -1.8>;  #declare RCorner = <1.8, 1.1, 1.8>;
	intersection {
		isosurface {
			function  { f_witch_of_agnesi(x,y,z, -0.09, 0.02) }
				//P0= Field Strength
				//P1= Controls width of the spike. The height of the spike is always about 1 unit
			contained_by { box { LCorner, RCorner } }
			max_gradient 0.6
			texture { IsoTexture }
			no_shadow
		}
		box { LCorner*0.9999, RCorner*0.9999  texture { ContTexture } }
		scale 3  rotate x*-20  translate y*-1.9
	}
#end
//***  FRAME 76  ***************************************************
#if ( frame_number = 76 )
	//**  f_witch_of_agnesi_2d  : lathe form  ***************************************
	#declare LCorner = <-1.6, -0.2, -2.2>;  #declare RCorner = <1.6, 2.2, 2.2>;
	intersection {
		isosurface {
			function  { f_witch_of_agnesi_2d(x,y,z, -0.2, 0.2, 0.08, 1, 0, 0) }
				//P0= Field Strength
				//P1= Controls width of the spike.
				//P2= Controls the height of the spike
				//P3= SOR switch
				//P4= SOR offset
				//P5= SOR angle
			contained_by { box { LCorner, RCorner } }
			max_gradient 1.9
			texture { IsoTexture }
		}
		box { LCorner*0.9999, RCorner*0.9999  texture { ContTexture } }
		scale 1.8  rotate x*-15  translate <3.1, -1.5, 0>
	}
	//** f_witch_of_agnesi_2d  : extruded form  ***************************************
	#declare LCorner = <-1.6, -0.2, -2.2>;  #declare RCorner = <1.6, 2.2, 2.2>;
	intersection {
		isosurface {
			function  { f_witch_of_agnesi_2d(x,y,z, -0.2, 0.2, 0.08, 0, 0, 0) }
				//P0= Field Strength
				//P1= Controls width of the spike.
				//P2= Controls the height of the spike
				//P3= SOR switch
				//P4= SOR offset
				//P5= SOR angle
			contained_by { box { LCorner, RCorner } }
			max_gradient 0.8
			texture { IsoTexture }
		}
		box { LCorner*0.9999, RCorner*0.9999  texture { ContTexture } }
		scale 1.8  rotate x*-15  translate <-3.1, -1.5, 0>
	}
#end
//***  FRAME 77  ***************************************************
#if ( frame_number = 77 )
	#declare Radius = 4;
	isosurface {
		function  { f_sphere(x,y,z, 4) + f_noise3d(x*1/0.5,y*1/0.3,z*1/0.4)*0.8 }
		contained_by { sphere { 0, Radius } }
		evaluate 1, 10, 0.99
		max_gradient 1.4
		texture { IsoTexture }
	}
#end
//***  FRAME 78  ***************************************************
#if ( frame_number = 78 )
	#declare Radius = 4;
	isosurface {
//		function  { f_sphere(x,y,z, 4) + f_noise_generator (x*1/0.5,y*1/0.3,z*1/0.4, 1)*0.8 }
		function  { f_sphere(x,y,z, 4) + f_noise_generator (x,y,z, 1)*0.8 }
				//P0= type of noise_generator used (0, 1, 2 or 3)
		contained_by { sphere { 0, Radius } }
		evaluate 1, 10, 0.99
		max_gradient 1.4
		texture { IsoTexture }
	}
#end
//***  END OF FILE  *************************************************/
      
