Middlemath

Suppose you start at the middle of a triangle, then map all possible ways you can jump eight times half-way towards one or another of the vertices of the triangle. At the end of the eight jumps, you mark your final position with a dot. You could jump eight times towards the same vertex, or once towards vertex 1, once towards vertex 2, and once again towards vertex 1. And so on. If you do this, the record of your jumps looks something like this:


The shape is a fractal called the Sierpiński triangle. But if you try the same thing with a square — map all possible jumping-routes you can follow towards one or another of the four vertices — you simply fill the interior of the square. There’s no interesting fractal:


So you need a plan with a ban. Try mapping all possible routes where you can’t jump towards the same vertex twice in a row. And you get this:

Ban on jumping towards same vertex twice in a row, v(t) ≠ v(t-1)


If you call the current vertex v(t) and the previous vertex v(t-1), the ban says that v(t) ≠ v(t-1). Now suppose you can’t jump towards the vertex one place clockwise of the previous vertex. Now the ban is v(t)-1 ≠ v(t-1) or v(t) ≠ v(t-1)+1 and this fractal appears:

v(t) ≠ v(t-1)+1


And here’s a ban on jumping towards the vertex two places clockwise (or counterclockwise) of the vertex you’ve just jumped towards:

v(t) ≠ v(t-1)+2


And finally the ban on jumping towards the vertex three places clockwise (or one place counterclockwise) of the vertex you’ve just jumped towards:

v(t) ≠ v(t-1)+3 (a mirror-image of v(t) ≠ v(t-1)+1, as above)


Now suppose you introduce a new point to jump towards at the middle of the square. You can create more fractals, but you have to adjust the kind of ban you use. The central point can’t be included in the ban or the fractal will be asymmetrical. So you continue taking account of the vertices, but if the previous jump was towards the middle, you ignore that jump. At least, that’s what I intended, but I wonder whether my program works right. Anyway, here are some of the fractals that it produces:

v(t) ≠ v(t-1) with central point (wcp)


v(t) ≠ v(t-1)+1, wcp


v(t) ≠ v(t-1)+2, wcp


And here are some bans taking account of both the previous vertex and the pre-previous vertex:

v(t) ≠ v(t-1) & v(t) ≠ v(t-2), wcp


v(t) ≠ v(t-1) & v(t-2)+1, wcp


v(t) ≠ v(t-1)+2 & v(t-2), wcp


v(t) ≠ v(t-1) & v(t-2)+1, wcp


v(t) ≠ v(t-1)+1 & v(t-2)+1, wcp


v(t) ≠ v(t-1)+2 & v(t-2)+1, wcp


v(t) ≠ v(t-1)+3 & v(t-2)+1, wcp


v(t) ≠ v(t-1) & v(t-2)+2, wcp


v(t) ≠ v(t-1)+1 & v(t-2)+2, wcp


v(t) ≠ v(t-1)+2 & v(t-2)+2, wcp


Now look at pentagons. They behave more like triangles than squares when you map all possible jumping-routes towards one or another of the five vertices. That is, a fractal appears:

All possible jumping-routes towards the vertices of a pentagon


But the pentagonal-jump fractals get more interesting when you introduce jump-bans:

v(t) ≠ v(t-1)


v(t) ≠ v(t-1)+1


v(t) ≠ v(t-1)+2


v(t) ≠ v(t-1) & v(t-2)


v(t) ≠ v(t-1)+2 & v(t-2)


v(t) ≠ v(t-1)+1 & v(t-2)+1


v(t) ≠ v(t-1)+3 & v(t-2)+1


v(t) ≠ v(t-1)+1 & v(t-2)+2


v(t) ≠ v(t-1)+2 & v(t-2)+2


v(t) ≠ v(t-1)+3 & v(t-2)+2


Finally, here are some pentagonal-jump fractals using a central point:








Post-Performative Post-Scriptum

I’m not sure if I’ve got the order of some bans right above. For example, should v(t) ≠ v(t-1)+1 & v(t-2)+2 really be v(t) ≠ v(t-1)+2 & v(t-2)+1? I don’t know and I’m not going to check. But the idea of jumping-point bans is there and that’s all you need if you want to experiment with these fractal methods for yourself.

Triangular Squares

The numbers that are both square and triangular are beautifully related to the best approximations to √2:

Number

Square Root

Factors of root

1 1 1
36 6 2 * 3
1225 35 5 * 7
41616 204 12 * 17

and so on.

In each case the factors of the root are the numerator and denominator of the next approximation to √2. — David Wells, The Penguin Dictionary of Curious and Interesting Mathematics (1986), entry for “36”.


Elsewhere other-accessible

A001110 — Square triangular numbers: numbers that are both triangular and square

Six Mix Trix

Here’s an equilateral triangle divided into six smaller triangles:

Equilateral triangle divided into six irregular triangles (Stage #1)


Now keep on dividing:

Stage #2


Stage #3


Stage #4


Stage #5


Equilateral triangle dividing into six irregular triangles (animated)


But what happens if you divide the triangle, then discard some of the sub-triangles, then repeat? You get a self-similar shape called a fractal:

Divide-and-discard stage #1


Stage #2


Stage #3


Stage #4


Stage #5


Stage #6


Triangle fractal (animated)


Here’s another example:

Divide-and-discard stage #1


Stage #2


Stage #3


Stage #4


Stage #5


Stage #6


Stage #7


Triangle fractal (animated)


You can also delay the divide-and-discard to create a more symmetrical fractal, like this:

Delayed divide-and-discard stage #1


Stage #2


Stage #3


Stage #4


Stage #5


Stage #6


Stage #7


Triangle fractal (animated)


What next? You can use trigonometry to turn the cramped triangle into a circle:

Triangular fractal

Circular fractal
(Open in new window for full image)


Triangle-to-circle (animated)


Here’s another example:

Triangular fractal

Circular fractal


Triangle-to-circle (animated)


And below are some more circular fractals converted from triangular fractals. Some of them look like distorted skulls or transdimensional Lovecraftian monsters:

(Open in new window for full image)


















Previous Pre-Posted

Circus Trix — an earlier look at sextally-divided-equilateral-triangle fractals

Square’s Flair

If you want to turn banality into beauty, start here with three staid and static squares:

Stage #1


Now replace each red and yellow square with two new red and yellow squares orientated in the same way to the original square:

Stage #2


And repeat:

Stage #3


Stage #4


Stage #5


Stage #6


Stage #7


Stage #8


Stage #9


Stage #10


Stage #11


Stage #12


Stage #13


Stage #14


Stage #15


Stage #16


Stage #17


Stage #18


And you arrive in the end at a fractal called a dragon curve:

Dragon curve


Dragon curve (animated)


Elsewhere other-engageable

Curvous Energy — an introduction to dragon curves
All Posts — about dragon curves

Bent Pent

This is a beautiful and interesting shape, reminiscent of a piece of jewellery:

Pentagons in a ring


I came across it in this tricky little word-puzzle:

Word puzzle using pentagon-ring


Here’s a printable version of the puzzle:

Printable puzzle


Let’s try placing some other regular polygons with s sides around regular polygons with s*2 sides:

Hexagonal ring of triangles


Octagonal ring of squares


Decagonal ring of pentagons


Dodecagonal ring of hexagons


Only regular pentagons fit perfectly, edge-to-edge, around a regular decagon. But all these polygonal-rings can be used to create interesting and beautiful fractals, as I hope to show in a future post.

Back to Drac’ #2

Boring, dull, staid, stiff, everyday, ordinary, unimaginative, unexceptional, crashingly conventional — the only interesting thing about squares is the number of ways you can say how uninteresting they are. Unlike triangles, which vary endlessly and entertainingly, squares are square in every sense of the word.

And they don’t get any better if you tilt them, as here:

Sub-squares from gray square (with corner-numbers)


Nothing interesting can emerge from that set of squares. Or can it? As I showed in Curvous Energy, it can. Suppose that the gray square is dividing into the colored squares like a kind of amoeba. And suppose that the colored squares divide in their turn. So square divides into sub-squares and sub-squares divide into sub-sub-squares. And so on. And all the squares keep the same relative orientation.

What happens if the gray square divides into sub-squares sq2 and sq9? And then sq2 and sq9 each divide into their own sq2 and sq9? And so on. Something very unsquare-like happens:

Square-split stage #1


Stage #2


Square-split #3


Square-split #4


Square-split #5


Square-split #6


Square-split #7


Square-split #8


Square-split #9


Square-split #10


Square-split #11


Square-split #12


Square-split #13


Square-split #14


Square-split #15


Square-split #16


Square-split (animated)


The square-split creates a beautiful fractal known as a dragon-curve:

Dragon-curve


Dragon-curve (red)


And dragon-curves, at various angles and in various sizes, emerge from every other possible pair of sub-squares:

Lots of dragon-curves


And you get other fractals if you manipulate the sub-squares, so that the corners are rotated or reverse-rotated:

Rotation = 1,2 (sub-square #1 unchanged, in sub-square #2 corner 1 becomes corner 2, 2 → 3, 3 → 4, 4 → 1)


rot = 1,2 (animated)


rot = 1,2 (colored)


rot = 1,5 (in sub-square #2 corner 1 stays the same, 4 → 2, 3 stays the same, 2 → 4)


rot = 1,5 (anim)


rot = 4,7 (sub-square #2 flipped and rotated)


rot = 4,7 (anim)


rot = 4,7 (col)


rot = 4,8


rot = 4,8 (anim)


rot = 4,8 (col)


sub-squares = 2,8; rot = 5,6


sub-squares = 2,8; rot = 5,6 (anim)


sub-squares = 2,8; rot = 5,6 (col)


Another kind of dragon-curve — rot = 3,2


rot = 3,2 (anim)


rot = 3,2 (col)


sub-squares = 4,5; rot = 3,9


sub-squares = 4,5; rot = 3,9 (anim)


sub-squares = 4,5; rot = 3,9 (col)


Elsewhere other-accessible…

Curvous Energy — a first look at dragon-curves
Back to Drac’ — a second look at dragon-curves

Think Inc #2

In a pre-previous post called “Think Inc”, I looked at the fractals created by a point first jumping halfway towards the vertex of a square, then using a set of increments to decide which vertex to jump towards next. For example, if the inc-set was [0, 1, 3], the point would jump next towards the same vertex, v[i]+0, or the vertex immediately clockwise, v[i]+1, or the vertex immediately anti-clockwise, v[i]+3. And it would trace all possible routes using that inc-set. Then I added refinements to the process like giving the point extra jumping-targets half-way along each side.

Here are some more variations on the inc-set theme using two and three extra jumping-targets along each side of the square. First of all, try two extra jumping-targets along each side and a set of three increments:

inc = 0, 1, 6


inc = 0, 2, 6


inc = 0, 2, 8


inc = 0, 3, 6


inc = 0, 3, 9


inc = 0, 4, 8


inc = 0, 5, 6


inc = 0, 5, 7


inc = 1, 6, 11


inc = 2, 6, 10


inc = 3, 6, 9


Now try two extra jumping-targets along each side and a set of four increments:

inc = 0, 1, 6, 11


inc = 0, 2, 8, 10


inc = 0, 3, 7, 9


inc = 0, 4, 8, 10


inc = 0, 5, 6, 7


inc = 0, 5, 7, 8


inc = 1, 6, 7, 9


inc = 1, 4, 6, 11


inc = 1, 5, 7, 11


inc = 2, 4, 8, 10


inc = 3, 5, 7, 9


And finally, three extra jumping-targets along each side and a set of three increments:

inc = 0, 3, 13


inc = 0, 4, 8


inc = 0, 4, 12


inc = 0, 5, 11

inc = 0, 6, 9


inc = 0, 7, 9


Previously Pre-Posted

Think Inc — an earlier look at inc-set fractals

Think Inc

This is a T-square fractal:

T-square fractal


Or you could say it’s a T-square fractal with the scaffolding taken away, because there’s nothing to show how it was made. And how is a T-square fractal made? There are many ways. One of the simplest is to set a point jumping 1/2 of the way towards one or another of the four vertices of a square. If the point is banned from jumping towards the vertex two places clockwise (or counter-clockwise) of the vertex, v[i=1..4], it’s just jumped towards, you get a T-square fractal by recording each spot where the point lands.

You also get a T-square if the point is banned from jumping towards the vertex most distant from the vertex, v[i], it’s just jumped towards. The most distant vertex will always be the diagonally opposite vertex, or the vertex, v[i+2], two places clockwise of v[i]. So those two bans are functionally equivalent.

But what if you don’t talk about bans at all? You can also create a T-square fractal by giving the point three choices of increment, [0,1,3], after it jumps towards v[i]. That is, it can jump towards v[i+0], v[i+1] or v[i+3] (where 3+2 = 5 → 5-4 = 1; 3+3 = 6 → 2; 4+1 = 5 → 1; 4+2 = 6 → 2; 4+3 = 7 → 3). Vertex v[i+0] is the same vertex, v[i+1] is the vertex one place clockwise of v[i], and v[i+3] is the vertex two places clockwise of v[i].

So this method is functionally equivalent to the other two bans. But it’s easier to calculate, because you can take the current vertex, v[i], and immediately calculate-and-use the next vertex, without having to check whether the next vertex is forbidden. In other words, if you want speed, you just have to Think Inc!

Speed becomes important when you add a new jumping-target to each side of the square. Now the point has 8 possible targets to jump towards. If you impose several bans on the next jump, e.g the point can’t jump towards v[i+2], v[i+3], v[i+5], v[i+6] and v[i+7], you will have to check for five forbidden targets. But using the increment-set [0,1,4] you don’t have to check for anything. You just inc-and-go:

inc = 0, 1, 4


Here are more fractals created with the speedy inc-and-go method:

inc = 0, 2, 3


inc = 0, 2, 5


inc = 0, 3, 4


inc = 0, 3, 5


inc = 1, 4, 7


inc = 2, 4, 7


inc = 0, 1, 4, 7


inc = 0, 3, 4, 5


inc = 0, 3, 4, 7


inc = 0, 4, 5, 7


inc = 1, 2, 6, 7


With more incs, there are more possible paths for the jumping point and the fractals become more “solid”:

inc = 0, 1, 2, 4, 5


inc = 0, 1, 2, 6, 7


inc = 0, 1, 3, 5, 7


Now try applying inc-and-go to a pentagon:

inc = 0, 1, 2

(open in new window if blurred)


inc = 0, 2, 3


And add a jumping-target to each side of the pentagon:

inc = 0, 2, 5


inc = 0, 3, 6


inc = 0, 3, 7


inc = 1, 5, 9


inc = 2, 5, 8


inc = 5, 6, 9


And add two jumping-targets to each side of the pentagon:

inc = 0, 1, 7


inc = 0, 2, 12


inc = 0, 3, 11


inc = 0, 3, 12


inc = 0, 4, 11


inc = 0, 5, 9


inc = 0, 5, 10


inc = 2, 7, 13


inc = 2, 11, 13


inc = 3, 11, 13


After the pentagon comes the hexagon:

inc = 0, 1, 2


inc = 0, 1, 5


inc = 0, 3, 4


inc = 0, 3, 5


inc = 1, 3, 5


inc = 2, 3, 4


Add a jumping-target to each side of the hexagon:

inc = 0, 2, 5


inc = 0, 2, 9


inc = 0, 6, 11


inc = 0, 3, 6


inc = 0, 3, 8


inc = 0, 3, 9


inc = 0, 4, 7


inc = 0, 4, 8


inc = 0, 5, 6


inc = 0, 5, 8


inc = 1, 5, 9


inc = 1, 6, 10


inc = 1, 6, 11


inc = 2, 6, 8


inc = 2, 6, 10


inc = 3, 5, 7


inc = 3, 6, 9


inc = 6, 7, 11


Boole(b)an #3

In the posts “Boole(b)an #1″ and “Boole(b)an #2” I looked at fractals created by certain kinds of ban on a point jumping (quasi-)randomly towards the four vertices, v=1..4, of a square. For example, suppose the program has a vertex-history of 2, that is, it remembers two jumps into the past, the previous jump and the pre-previous jump. There are sixteen possible combinations of pre-previous and previous jumps: [1,1], [1,2], 1,3] … [4,2], [4,3], [4,4].

Let’s suppose the program bans 4 of those 16 combinations by reference to the current possible jump. For example, it might ban [0,0]; [0,1]; [0,3]; [2,0]. To see what that means, let’s suppose the program has to decide at some point whether or not to jump towards v=3. It will check whether the combination of pre-previous and previous jumps was [3+0,3+0] = [3,3] or [3+0,3+1] = [3,4] or [3+0,3+3] = [3,2] or [3+2,3+0] = [1,3] (when the sum > 4, v = sum-4). If the previous combination is one of those pairs, it bans the jump towards v=3 and chooses another vertex; otherwise, it jumps towards v=3 and updates the vertex-history. This is the fractal that appears when those bans are used:

ban = [0,0]; [0,1]; [0,3]; [2,0]


And here are more fractals using a vertex-history of 2 and a ban on 4 of 16 possible combinations of pre-previous and previous jump:

ban = [0,0]; [0,1]; [0,3]; [2,2]


ban = [0,0]; [0,2]; [1,0]; [3,0]


ban = [0,0]; [0,2]; [1,1]; [3,3]


ban = [0,0]; [0,2]; [1,3]; [3,1]


ban = [0,0]; [1,0]; [2,2]; [3,0]


ban = [0,0]; [1,1]; [1,2]; [3,2]

Continue reading “Boole(b)an #3”…


Elsewhere other-engageable

Boole(b)an #1
Boole(b)an #2

Root Routes

Suppose a point traces all possible routes jumping half-way towards the three vertices of an equilateral triangle. A special kind of shape appears — a fractal called the Sierpiński triangle that contains copies of itself at smaller and smaller scales:

Sierpiński triangle, jump = 1/2


And what if the point jumps 2/3rds of the way towards the vertices as it traces all possible routes? You get this dull fractal:

Triangle, jump = 2/3


But if you add targets midway along each side of the triangle, you get this fractal with the 2/3rds jump:

Triangle, jump = 2/3, side-targets


Now try the 1/2-jump triangle with a target at the center of the triangle:

Triangle, jump = 1/2, central target


And the 2/3-jump triangle with side-targets and a central target:

Triangle, jump = 2/3, side-targets, central target


But why stop at simple jumps like 1/2 and 2/3? Let’s take the distance to the target, td, and use the function 1-(sqrt(td/7r)), where sqrt() is the square-root and 7r is 7 times the radius of the circumscribing circle:

Triangle, jump = 1-(sqrt(td/7r))


Here’s the same jump with a central target:

Triangle, jump = 1-(sqrt(td/7r)), central target


Now let’s try squares with various kinds of jump. A square with a 1/2-jump fills evenly with points:

Square, jump = 1/2 (animated)


The 2/3-jump does better with a central target:

Square, jump = 2/3, central target


Or with side-targets:

Square, jump = 2/3, side-targets


Now try some more complicated jumps:

Square, jump = 1-sqrt(td/7r)


Square, jump = 1-sqrt(td/15r), side-targets


And what if you ban the point from jumping twice or more towards the same target? You get this fractal:

Square, jump = 1-sqrt(td/6r), ban = prev+0


Now try a ban on jumping towards the target two places clockwise of the previous target:

Square, jump = 1-sqrt(td/6r), ban = prev+2


And the two-place ban with a central target:

Square, jump = 1-sqrt(td/6r), ban = prev+2, central target


And so on:

Square, jump = 1-sqrt(td/6.93r), ban = prev+2, central target


Square, jump = 1-sqrt(td/7r), ban = prev+2, central target


These fractals take account of the previous jump and the pre-previous jump:

Square, jump = 1-sqrt(td/4r), ban = prev+2,2, central target


Square, jump = 1-sqrt(td/5r), ban = prev+2,2, central target


Square, jump = 1-sqrt(td/6r), ban = prev+2,2, central target


Elsewhere other-accessible

Boole(b)an #2 — fractals created in similar ways