1// Stereographic Projection
2// Mapping an infinite plane onto the surface of a unit sphere.
3// https://en.wikipedia.org/wiki/Stereographic_projection
4
5let
6    stereographic_projection plane = sphere 2 >> colour
7        ([x,y,z,t]->plane.colour[x/(1-z), y/(1-z), 0, t]);
8
9    log_spiral [a,b] = make_shape {
10        dist [x,y,_,_] =
11            let r = mag[x,y];
12                t = phase[x,y];
13            in if (r == 0)
14                0
15            else
16                let n = (log(r/a)/b - t) / tau;
17                    upper_r = a * e^(b*(t+tau*ceil n));
18                    lower_r = a * e^(b*(t+tau*floor n));
19                in min[abs(upper_r-r), abs(r-lower_r)] - r*b;
20        is_2d = true;
21    };
22    spiral = union[colour red everything, log_spiral[1,.2]];
23
24in
25spiral >> stereographic_projection
26