4.4.11 Script i_internal

Utilisation : Les liens ne sont pas apparents. Pour obtenir des informations sur un mot clé, cliquez-le dans le script !

Quant aux images, cliquez sur le titre en commentaire qui correspond à la figure choisie pour faire apparaître un "popup" qui contiendra le résultat (Ex : si vous cliquez le commentaire "// FRAME 1", vous aurez la fonction "f_algbr_cyl1" en image).

// Persistence of Vision Ray Tracer 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
#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>
	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 1.2
		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
		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}
		no_shadow
		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}
		no_shadow
		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 1.4
		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

Pour les images, cliquez sur le titre en commentaire qui correspond à la figure choisie pour faire apparaître un "popup" qui contiendra le résultat (Ex : si vous cliquez le commentaire "// FRAME 1", vous aurez la fonction "f_algbr_cyl1" en image).

Et voici le fichier de lancement :

; Persistence Of Vision raytracer version 3.5 sample file.
Input_File_Name = i_internal.pov

Initial_Frame = 1
Final_Frame = 78
Initial_Clock = 0
Final_Clock = 1

Pause_when_Done = off

Cyclic_Animation = off	;;insures it reaches 1.0
Retour Retour