# Built In Functions

 There is a considerable collection of built in functions. The simplest such function is the sphere, which can be used like this: ``` #include "functions.inc" isosurface { function { f_sphere(x,y,z,1) } accuracy 0.001 contained_by{sphere{0,1.2}} pigment {rgb .9} } ``` Which gives exactly the same results as you would get by using a conventional sphere {0, 1} object or using the mathematical isosurface function { x*x + y*y + z*z - 1 } . The ,1 is a parameter that gets applied to the built in function. In the case of a sphere, the parameter sets the radius. To perform the intersection of two built in isosurfaces, we take the max() of the two function, like this ``` function {max(f_torus(x,y,z,1, 0.3), f_sphere(x,y+0.5,z,1))} ``` Notice that it also possible to perform variable substitution at the same time. In this case the sphere has been shifted down by using "y+0.5" instead of "y". Some built in functions are not surfaces when used alone, and are only useful when combined with other surfaces. f_th() is one such function. f_th() produces a value which is equal to the "theta" angle, in radians, at any point. The theta angle is like the longitude co-ordinate on the Earth. It stays the same as you move north or south, but varies from east to west. The functions f_r(), f_th() and f_ph() are equivalent to the standard 3d polar co-ordinates Radius, Theta and Phi. This surface is a sphere to which has been added a height that's proportional to sin(theta), but which also decreases as you get near the poles (otherwise the ridges look out of proportion when the come close together). ``` #declare Theta = function{f_th(x,y,z)} #declare Sphere = function{f_sphere(x,y,z,1)} isosurface { function { Sphere(x,y,z) + sin(Theta(x,y,z)*20)*0.05*(1-y*y) } ``` Here's a nice teardrop shape, called "Glob". ``` isosurface { function { - f_glob(x,y,z,0.1) } max_gradient 2 contained_by{sphere{0,1.2}} pigment {rgb .9} finish {phong 0.5 phong_size 10} } ``` One part of this surface would actually go off to infinity if it were not restricted by the contained_by shape. It's possible to select just the teardrop part by choosing the contained_by shape appropriately.