#declare Sqr = function(k) {k*k}; #declare Zero = function(cr, ci, sr, si) {sqrt(Sqr(cr-sr) + Sqr(ci-si))}; #declare Pole = function(cr, ci, sr, si) {1 / Zero(cr, ci, sr, si)}; #declare A1 = pi*(0.5 + 0.5/3); #declare A2 = pi*(0.5 + 1.5/3); #declare A3 = pi*(0.5 + 2.5/3); #declare R1 = 0.5*cos(A1); #declare I1 = 2*sin(A1); #declare R2 = 0.5*cos(A2); #declare I2 = 2*sin(A2); #declare R3 = 0.5*cos(A3); #declare I3 = 2*sin(A3); #declare TransferRaw = function(sr, si) {log(Pole(R1, I1, sr, si) * Pole(R2, I2, sr, si) * Pole(R3, I3, sr, si))}; #declare Transfer0 = TransferRaw(0, 0); #declare Transfer = function(sr, si) {TransferRaw(sr, si) - Transfer0}; camera { location <0, +2, -6> look_at 0 } light_source {<-3, +2, -5>, colour rgb <1.0, 0.5, 0.5>} light_source {<+3, +2, -5>, colour rgb <0.5, 1.0, 0.5>} light_source {< 0, +2, +5>, colour rgb <0.5, 0.5, 1.0>} #declare Graph = object { isosurface { function {y - Transfer(-z, x)} contained_by {box {<-8, -2.5, -8>, <+8, +2, +8>}} max_gradient 10 } texture { pigment { gradient y colour_map { #declare K = 0; #declare N = false; #while (K <= 1) [K #if(N) rgb <1, 1, 0.5> #else rgb <0.5, 0.5, 1> #end] #declare K = K + 1/16; #declare N = !N; #end #undef N #undef K } } finish {ambient 0} } } #declare Cut = 0.5; #declare CutT = texture { pigment {colour red 1} finish {ambient 0} } intersection { object {Graph translate -Cut*z} object {plane {+z, -Cut} texture {CutT}} } intersection { object {Graph translate +Cut*z} object {plane {-z, -Cut} texture {CutT}} }