motion blur looks bad on static images but helps videos appear less stoboscopic

Repeated `log2` does weird things to the timing curves and stops the layers aligning properly, adding some `exp2` inside the loop can regularize it:

x= (1 - exp2(-x)) * 2;

This makes the crises happen on a grid which should make writing a soundtrack much easier than the fluid tempo curves of the uncorrected version.

claude boosted
claude boosted

We just released the OPEN CALL for #AMRO20
Deadline: Monday 24.02.2020

We are looking forward to your submissions!

The key part of the algorithm's inner loop:

x = fract(-log2(1 - x));

I figured out the maths more properly: now the wiggles don't shrink as they approach crisis, instead they join smoothly to each next level.

I also chose less ugly colours: now shades of grey with eventually some red introduced.

Will be working on a soundtrack this week.

Working on a thing based on the way Mandelbrot deep zooms stack up rings of features doubling each time, with new features added to the stack when passing minibrots. So far just black and white squares, but the repeated/nested period doubling crises are working.

claude boosted

new blog post summarizing the recent stuff on mating Julia sets that I've been playing with

Uploaded my code to visualize slow mating of quadratic polynomial Julia sets:

600 lines of C99, using OpenMP for parallelism. Some options are compile-time only for now (edit source to reconfigure).

Blog post coming soon...

Did try rotating the Riemann sphere so that the centers of the Julia sets are left and right in the frame instead of surrounding the top and bottom poles. But it didn't look as good, mainly because there was too much fine detail near the poles that got all smeary.

I had two bugs that cancelled each other out. The test for hemispheres should be |z| > 1.

To draw the filled-in Julia sets, calculate w = R z or w = R / z depending on hemisphere, and iterate w = w^2 + c (choice of c is hemisphere dependent) until escape or maximum iterations reached. Count the previous (z^2+a)/(z^2+b) stuff in the iteration count too.

Colour unescaped pixel by hue = arg(z - a) where a = (1-sqrt(1-4c))/2 is a fixed point (center of multiple arms).

To draw filaments in the Julia sets themselves (not just the interior) I think I need to compute derivatives w.r.t. screen-space. I have some dual-complex-number library code ready to go.

I might have the colours switched on that one, not sure. Using more colours would help diagnose the different periods.

I did one experiment with arg(z) and that eventually showed dynamics of components as they got pinched, but was very noisy near the equator, and wasn't consistent between adjacent frames (massive strobing).

Didn't yet figure out how to draw the Julia sets in the halves.

Here's airplane (period 3 island, black) vs kokopelli (north period 4 island, white).

Code is about 300 lines of C99 (uses _Complex).

I think I solved it!

Animated slow mating of p=-1+0i with q=-0.122+0.75i via inverting the pullback, which gives a series of functions like (az^2+b)/(cz^2+d); starting from the pixel coordinates in equirectangular projection I compute the initial z and apply all the collected functions in reverse order, colouring white if the final output |z| > R for some large R.

Next step will be trying to draw the Julia sets in the halves of the sphere.

Attempt at escape-time Apollonian gasket via circle inversions.

1/3 mated with 1/2->1/2-> towards Feigenbaum point.

Bit glitchy, some misconvergence in the slow mating algorithm perhaps, I guess when it is near parabolic? Not sure...

Show more

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