I finally understand Pauldelbrot's formula enough to have extended it to true "dial-a-" parameter representation.

I posted more details here, also check the post I quoted (follow link back to original post) in this thread:

Hm, I think the dial-a-Julia is more complicated than that - doesn't seem to work intuitively in all cases...

Show thread

yeah it''s way more complicated. even for combining two Julia sets you need iterative algorithms (reading about "slow mating" recently).

Show thread

This is 1/5 mated with 3/7, by Wolf Jung's slow mating code. I think these are called "kokopelli" and "airplane" but I'm not 100% sure.

The coordinates of the original quadratic Julia sets z^2+p and z^2+q are:

This gets transformed by slow mating into a rational Julia set of (z^2+a)/(z^2+b) with:

Why the code needs angles as inputs and not just p,q complex numbers I'm not sure - maybe it has to do with needing (pre)periods for the mating step? I need to read the code to be sure...

Show thread

Extract from the code:

u = rd - 1.0L, v = id, x = 1.0L - rc, y = ic, w = x*x + y*y;
u /= w; v /= w; w = u*x - v*y; y = u*y + v*x; x = w;
u = rd*rd - id*id; v = 2.0L*rd*id; w=u*u + v*v;
x /= w; y /= w; w = x*u + y*v; y = y*u - x*v; x = w;
w = rd*rd + id*id; u = rc/w; v = ic/w;
w = u*rd + v*id; v = v*rd - u*id; u = w;
w = u*x - v*y; v = u*y + v*x; u = w;

it would be nice if there were comments explaining what complex number expression of (rd+i id) and (rc + i ic) this is computing into (u+ i v) and (x + i y), but there aren't, so I guess I have to carefully unpick what all of this means.

This is the bit that takes the mated values and from them computes $a$ and $b$ for the rational function $(z^2+a)/(z^2+b)$.

Show thread

I think that the mess of code works out as:

$$A = \frac{C(D-1)}{D^3(1-C)}$$
$$B = \frac{D-1}{D^2(1-C)}$$

but I'm not 100% sure, I guess I could test it numerically to see how close it is....

Show thread

I implemented Slow Mating for quadratic polynomials using the equations and hints in Chapter 5 of Wolf Jung's 2017 paper "The Thurston Algorithm for quadratic matings"

My code is 145 lines of quite-straightforward C, vs 2249 lines of C++ with various state hidden in mutating objects for the code accompanying the paper (which admittedly does a lot more, working from angles to compute the complex points and (pre)periods that are the input to my code). I'll do a blog post next week once I've tested more cases to make sure I haven't done any big mistakes.

There were a couple of subtleties, 1. needing to use cproj() to normalize infinity's representation and avoid NaNs; and 2. in one place, converting (a - b) / (a - c) to (1 - b/a) / (1 - c/a) so that it still works when a is infinite.

Attached images are the north period 4 island mated with the west period 4 island (blue background), and 2/5 bulb mated with 1/2 bulb (turquoise background).

Show thread

1/3 child bulb of north period 4 island, mated with 1/2 child bulb of period 3 island

I used my mandelbrot-numerics programs to calculate the input coordinates:
./slow-mating $(m-nucleus double $(m-exray-in double ".(001100110100)" 16 1000 | tail -n 1) 12 64 1) 0 12 $(m-nucleus double $(m-exray-in double ".(011100)" 16 1000 | tail -n 1) 6 64 1) 0 6

Show thread

I plotted the pullback curves of the previous example. for periodic cycles the first curve is fixed at 0 or infinity and the next is the critical point (which in previous posts I labelled C and D for the two families of curves, and gave an expression to calculate A and B from them to give the rational function (Z^2+A)/(Z^2+B)).

The pullback process involves all the curves simultaneously, each segment of the curve depends on the previous segment of the next curve in the periodic cycle.

I didn't check for homotopy violations yet, not sure how, nor when it is likely to occur....

Show thread
Sign in to participate in the conversation

Welcome to, an instance for discussions around cultural freedom, experimental, new media art, net and computational culture, and things like that.