Friday, March 13, 2026

Fluvial landscapes

A topic I return to from time to time is fluvial landscapes. These are common in nature but don't seem to fit naturally into any of the standard classes of 3D recursive shape. This post is about extremely simplified descriptions of them. 

About the simplest is this subdivision scheme:

It takes a plan-view right angles triangle and subdivides it in two, lowering by an amount proportional to the side length. Each iteration it flips between lowering or raising the newly added vertex. This has the basics of a fluvial landscape: fractal roughness, angled valleys and ridges. However the valleys follow a blancmange curve in their profile, so water wouldn't run down it like a real fluvial landscape.

Probably the next simplest is to replace the 'midpoint offset' with a smooth profile. Rather than setting the mid height to (z_0 + z_1)/2 we set it to (z_0 + kz_1)/(1+k) where k=e^{al/2} and a describes how concave the slope is and l is the horizontal edge length. 

Here for a=4:

It is less rough though. An improvement is to change a inversely to the edge length, but only on new edges. This stops tributaries from entering at steep angles near the river source, reflecting the idea that they would need to slow down to change direction as they enter the main stream (which is faster and so more sloping):




Saturday, March 7, 2026

Inversive Substitution Rules

A substitution rule assigns a colour to each self-similar region in a shape, where each colour has its own rule set. It produces a recursive shape which, much like an L-system, generates more complex shapes than simple recursive fractals.

A simple example is the Menger carpet. There are two colours of square, white and black. The rules are:

white: split into 3x3 grid such that centre is black and the rest are white.

black: stay black.

Of course you can get more complicated, for instance you could have four types, labelled white, red, green and black, starting with white:

white → alternating white and red with central black

red → alternating white and red with central green

green → all green

black → all black


Anyway, I'm interested in such substitution rules but for inversive limit sets. 

The idea with these limit sets is that the symmetries are inversions around spheres that connect at dihedral angles that are pi/n for integer n. 

In all cases I have seen of these inversive limit sets there is just a single set of spheres, so generating a simple recursive structure. 

In order to generate more complex shapes we can use substitution rules to mix in different types of inversive set at different locations. 

The key constraint is that when you substitute in a different set of spheres, it must connect identically to its neighbours after some Mobius transformation. 

Here's an example with two colours:

green: a set of 6 (green) spheres that generates a tree structure (left hand side below)

red: a set of 6 spheres that generates a shell structure (concavities). These are all red apart from one green sphere 


So the tree structure is a fractal tree all the way down, but the red shell structure has green protuberences inside each dome. This can only work if there is a Mobius transformation of the green sphere inside the res sphere set, which makes its neighbours match the neighbours of the destination green sphere.

We prescribe this structure by taking the connectivity diagram of the shell structure (left) and making one of the nodes substitute into a node in the tree connectivity structure (right):



The next example uses five generalised spheres to make a cubic-symmetry shell. Ignore the little balls which are a temporary rendering artefact:
We can make a similar structure but with a sphere protruding more to be tree-like in shape:
Now, if we substitute the intruding sphere in the first inversive limit set into the protruding sphere in the second one then we get a mixture of concave and conves:
We can also do it the other way around, substituting in the concave shell onto the second limit set:
again, ignoring the little ball rendering artefacts.




Monday, January 19, 2026

Parametric functions

Just out of interest, here are the standard functions we are used to, but converting the second differential of the function to curvature instead. Or equivalently, converting gradient to path angle:

x

x^2

x^3

x^4
tan x
1/x
exp x
log x
x^x
normal dist
8.5 * normal dist

But one of the more interesting is probably the sine function, which looks quite different just by scaling up:

sin x
pi/2 sin x
2.11 sin x

2.405 sin x
2.66 sin x
pi sin x
4.7 sin x
5.24 sin x


The coefficient in the figure eight sine wave is more precisely the first zero of the Bessel function J_0. Credit to Greg Egan for pointing that out.

You can also render the factorial function as a continuous curve. However to prevent lots of overlap it helps to divide the angle by four:



In addition to standard asymptotes, this depiction of functions can also in somes cases visualise functions with a domain larger than the Reals. 

For instance, if we take a standard cubic function:

and make it periodic every omega on the Surreal domain by setting:
where r_0 is the cofficient of omega^0 in the Conway normal form of x:
then we can visualise it as:

The green lines are values outside of the Reals.
This example is rather artificial as it explicitly creates an omega-periodic function. It is not clear whether any "standard" function on the Reals that is non-periodic can become periodic on the Surreals. It definitely isn't the case for polynomial functions. 






Thursday, January 1, 2026

3DOF Wheels

In this post I described a type of void-sponge based on the 6 regular polychora (5-cell, 8-cell, 16-cell, 24-cell, 120-cell and 600-cell). A nice property of these is their symmetry to 4D rotations projected stereographically into 3D, in other words transformations that rotate around a circular ring. 

If we apply this rotation with translation you get a nice 'swimming' motion:

You could imagine that if there was such a flexible object then it could traverse through water because the outer region pushing downwards is larger than the inner region pushing upwards. 

And due to its symmetry it can move in any direction in 3D. The principle axes require the least expansion and contraction, and are shown here with it moving in each axis direction in turn:



You can think of it as a 3 degree-of-freedom version of a wheel. It can move a payload in 3DOFs where a ball-robot can move it in 2D, a wheel moves a payload in 1D and something like a table leg moves a payload in 0D i.e. nowhere, it just supports the payload.


But there are 6 DOFs of 4D rotations, so the structure can do more than just translations. If we offset the circular rotation then it should turn as it pushes through the water, since the outer edge is pushing down faster on the right side than the left in this animation:


Even though there are 6 DOFs in 4D rotations, the three rotation degrees of freedom are rigid so uncontrollable by the structure itself. The remaining degrees of freedom allow it to get around, underwater in the above case, but also on land.

For example, something like this transformation could allow the structure to move forwards, by pushing more of its mass forward:

Notice that this is different from a rigid roll, notice the change in size of the large circular edge.

It could also transform into more of a 1DOF wheel shape:

and there is still freedom to distort the wheel while keeping its rim circular, in order to push in a particular direction by offsetting the centre of mass:

We can do all of these things with the other regular polychora-based void-sponges. Here is the swimming motion for the 24-cell sponge:

The largest holes are the best locations for new directions as they minimise the expansion and contraction required. The 24-cell has more symmetry than the 8-cell, so change its movement with a choice of six different directions naturally, compared to four for the 8-cell (translate left, right, fwd, bwd).

Incidentally, the 'rotation around a circular ring axis' transformation is called an elliptic Mobius transformation. But since this is somewhat misleading terminology I prefer the term poloidal rotation, which couples nicely with its counterpart toroidal rotation (along the ring): https://en.wikipedia.org/wiki/Toroidal_and_poloidal_coordinates.
You could also call it vortex rotation or vortex circulation, but that is more suggestive of a vector field.

There is another form of locomotion that seems better suited to burrowing underground as the poloidal motion above would require displacing a lot of earth. The motion is a hyperbolic Mobius transformation:

Unlike the elliptic transformation, this contains unbounded contraction (at the top) and expansion at the bottom. It would be harder to generate biophysically, but not impossible, it would need the physical cells to redistribute as it moves. Or in other words, the cells would need to coordinate the holes to move locally upwards without moving the cells upwards.

As with the swimming motion, this method can burrow along any of the three axes, and turn its heading. It is also possible with the other void-sponges too, such as the 8-cell version.

There is one Mobius transformation not mentioned yet, the parabolic transformation. This is equivalent to addition on the Riemann sphere, it leaves one point fixed on the structure's surface. This could be useful for turning on the spot when burrowing.  

Saturday, December 6, 2025

basic inversive tree-shell

The tree-shell is probably the hardest structure to make with inversive geometry because it requires the structure to 'conspire' to meet along a line or curve. Other structures such as cluster-trees and tree-sponges only require single points to meet.

Ideally I'd like to find one that is nowhere differentiable, in particular that every surface patch contains approximations of the whole structure under conformal transformations. 

However due to the difficulty in this post I'll make one that is mainly smooth spherical surfaces. Nevertheless, it makes for a nice looking shape.

It is based on the 2D tree-solid from a previous post, but extended to 3D, and looks like this:

The 8 legs is arbitrary, as long as it is even. You can go higher like 10 here, but start to get a little self-intersection:

The method is a replacement fractal under Mobius transformations. There are three types of structure being used. Each type is constructed from a combination of the  types as shown:
 

Type 0:

Type 1:
Type 2:

It is a tree-shell because it would normally be a tree of recursive hemispheres, but the hemispheres meet along edges as seen between the two types on the right side of the above pictures. This forms a water-tight basin, at multiple scales, which makes it a shell.

Apart from the making a nowhere differentiable tree-shell (which would have a very different construction) I think there is probably a way to improve the above structure...

Notice the type 2 shape in the bottom image, the rightmost limb is significantly bigger than the limb next to it. That's because we use only three types, one meets the parent sphere at an angle of zero (the big one) and the others meet at an angle of 45 degrees.

I think it may be possible to interpolate between the small limb (left) and the big limb (right) so the meeting angle gradually drops to zero. 

Shader: https://www.shadertoy.com/view/tcycWD


Friday, November 7, 2025

Extra anti-twisters

The anti-twister is an interesting mechanism that gives a physical interpretation for a physical state that returns to the same state after the inner part turns 720 degrees.

This has connections with the quaternion sandwich product as the qvq^-1 is similar to the RTR^-1 transformation of the anti-twister.

One thing missing in the analogy is that the quaternion sandwich product can be applied in two ways. The quaternion is an isoclinic rotation, so it rotates by equal magnitude angles on two orthogonal planes in 4D. To create the double-cover of the 3D rotation one of these rotations is cancelled out in the sandwich product. The alternative sandwich product (using an alternative multiplicatino table, or possible using the complement of q) has the cancelled out rotation having the opposite sign.

The anti-twister's twist matrix T rotates around the y axis by an angle y in radius that depends on the radius x. The usual function is a smooth step from y=pi at x=0 down to y=0 at say x=2.

We can create two different anti-twisters if we make the object being rotated 720 degrees not the centre, but a unit sphere. Both the centre and the distance space is unrotated. The two types depend on which direction we rotate the inner space relative to the outer space. 

If we rotate in the same direction we get this anti-twister:

which corresponds to this y-axis rotation profile with respect to radius: 

If we rotate in the opposite direction we get this anti-twister:
which corresponds to this rotation profile: