Convergence in the Lorenz Attractor

Most visualizations of the Lorenz attractor are of a long history of a single point after convergence to the attractor has occurred. I was interested in what the surrounding space looked like, so I randomly selected 20,000 starting points from a three dimensional Gaussian distribution with a standard deviation of 100. Each point was iterated, and a short history displayed as a trail.

Interestingly enough the points do not simply fall in from arbitrary directions like a gravity field, but display structure by instead swirling along a clear path up the z axis.

The Quaternion Bulb

My three dimensional unfolding of the quaternion Julia sets finally finished rendering. There are a fair bit of compression artifacts in the embedded version, click on the Vimeo button on the bottom right side of the video to watch it in full quality HD.

Since each quaternion can be described using four numbers, I unfolded these four dimensional quaternion Julia sets into three dimensional space, and animated the final coefficient.

xyzft

But once I did that I noticed some radial symmetry along the y-z plane – it looks like something that’s been made on a lathe. This means that we can “index” all these shapes in a more sensible manner by collapsing things along this axis of symmetry. While previously we could index all of our shapes with four coefficients a, b, c, and d.

abcd

We can now index them with four coefficients a, r, theta, and d after this transformation. But there’s a nice side effect now that our coordinate system reflects our symmetry – if we vary theta, the appearance of the Julia set doesn’t change, the object just appears to rotate about the a axis.

ard

So really we can index all possible shapes using only three coefficients – a, r, and d. This is awesome – it means we can use this symmetry to collapse a dimension and completely illustrate a discrete approximation of this four dimensional set in three dimensional space. The following images (click for 1080p full resolution images) illustrate the full set of these possible shapes – a is the horizontal axis, r is the vertical axis, and values iterate by 0.25. The grey sphere in the first image is the origin, and the images start at a d value of 0 and iterate upward by 0.25. We find that there exists additional symmetry with our d parameter – namely that d = -d, so we only need to illustrate the absolute value to see all shapes.

d = 0.00
juliacube-0.00

d = 0.25
juliacube-0.25

d = 0.50
juliacube-0.50

d = 0.75
juliacube-0.75

d = 1.00
juliacube-1.00

When d = 1.25 there are only a few bits of unconnected dust loops visible. This analysis only covers a single “slice” – namely the plane normal to (0,0,0,1). I’d be very interested to see if there are any other symmetries…

A Quaternion Fractal Chorus

Treating my last attempt at rendering quaternion Julia sets as a study, I wanted to move on to alternate methods of visualising the deep structure of these four dimensional objects. There’s a lot of complexity there which results in some compression artifacts – watch it in HD to get the full effect.

There is a four dimensional Julia set for every four dimensional quaternion. We can label each quaternion using four numbers.

quaternion

I decided to “unfold” the first two values of the quaternion onto a plane and animate the last two values. The camera is centered at (0,0) and Julia sets are placed at intervals of 0.1 off to infinity for both axes.

grid

You can start to see the larger structure present more clearly. Perhaps a three dimensional unfolding next?

Quaternion Julia Fractals

What exactly is a quaternion Julia set? Well, it’s beautiful.

These shapes are animated projections of three dimensional slices of four dimensional objects known as quaternion Julia sets. The definition of a Julia set can get a bit complicated, but it can be thought of as an object that carves up four-dimensional space into two categories – belonging to the set, and not belonging to the set. How exactly the shape is carved depends on some very deep mathematics.

Now the big question – how do we look at a four dimensional object if we’re just mere three dimensional humans? Well, first let’s try to describe how we can look at a three dimensional object using only two dimensions.

When I think of two dimensions, I think of a flat sheet like a piece of cardboard. How could we use this flat sheet, or a lot of flat sheets, to make up a three dimensional object? Well, if we were very clever like Yuk King Tan, we could cut a huge number of cardboard sheets carefully and stack them up on top of each other. From far away it would look like a three dimensional object.

Tan-03

But if we look closely.

Tan-06

Very closely.

Tan-07

We can see that this is made up entirely of two dimensional objects cut into specific shapes, each shape cut perfectly to reflect the three dimensional object at a certain height. This is just like how an MRI machine takes “slices” of a three dimensional object (a human!) as it slowly moves upwards. The image below shows the 2D slices of the 3D skull starting just below the eyes.

mrislices

If we could only see two dimensions, we could flip through each one of these images in turn to get an idea of just what a three dimensional brain looks like. This is what doctors do – all of our current display technology, fancy HDTVs included, currently only display two dimensions. So they take many two dimensional slices and then compare and visualize them in relation to each other, in order to get some idea of what our three dimensional body is actually like.

So we can do the same thing with these four dimensional Julia sets. We can take many three dimensional slices, animate them, and then compare and relate these slices to each other in order to create some idea in our brain of just what this four dimensional structure is.

I See Sierpinski Shapes by the Sea Shore

I recently saw a very interesting photo of a sea shell on Flickr.

sierpinski_seashell

The patterns on the shell appear to be very similar to that of a mathematical structure called a Sierpinski triangle – and this is no coincidence.

ca_rule

A snail’s shell can grow only by adding on new material in a thin layer on the lip the shell. The pigmentation cells lie in a narrow band on this lip, and decide whether to switch on or off depending on the pigmentation of the area immediately around it. In short, the pigmentation patterns can be modelled as elementary cellular automata very accurately.

Several elementary cellular automata rule sets produce similar structures to that seen on the shell. Combine these basic rules with a little bit of noise due to nature, and you get these beautiful pattens with a bare minimum of computational effort.

The snail that grew the shell above is from the family Conidae. Other species have slightly different rules for pigmentation, but all produce their patterns by a method that can be modelled as cellular automata.

conidae_2