I’ve been meaning to do this for a long time: create the simplest possible genetic fractal based on a binary string. Let me explain.
The nice looking fractals I post here and elsewhere are all driven by a genetic sequence. This goes something like: bend to the left by so much
, increasing the radius smoothly by so and so. Split into so many branches and vary the color palette smoothly. These are detailed instructions which are a bit like a fractal programming language. Below is a snippet of a coffee mug:
[[feet3 childProfile invisible :15.0:1.0:0.2:0.000000001 :feet4]]
[[feet4 childProfile invisible :12.0:1.0:-0.22:0.000000001 :feet5]]
[[feet5 setSize invisible :1.0:4.0:4.0:4.0 :feet6]]
[[feet6 shiftR invisible :-1.4 :feet7]]
[[feet7 child Sphere :1.0:1.0:0.00001:0.000000001 :end]]
[[ear flipR invisible :1.0 :ear0]]
[[ear0 setSize invisible :1.0:5.0:2.0 :ear1:eara1]]
This then leads to this.
Binary genetic fractal programming
The genetic fractal programming language is a high level language. But what if we strip it from all the bells and whistles and reduce it to the simplest of forms: a binary instruction language?
I’ve been meaning to do this for several years and have done so now. It is so simple, that it actually explains genetic fractals better than any attempt I have made in the past. As with all genetic fractals, we define a genetic string:
The top twine define the curve and the bottom twine determines where the genetic fractal should branch.
Each bit of the curve twine has a simple meaning.
0 = turn left by xxx Rad
1 = turn right by xxx Rad
The “xxx” is typically small. I have used Pi / 512.
The branching twine has the following interpretation
0 = don’t branch, just keep growing
1 = split into two mirror branches and continue growing
Such a genetic string will produce the following genetic fractal.
Although you won’t see such smooth fractals anywhere else (…) the neat thing about genetic fractals is that you can edit the genetic strings by inserting short sequences. Below, I have inserted short sequence that loops around to the right (or mirrored left) for a full circle. The rest stays the same.
Why use a binary genetic fractal programming language?
The honest answer is that I don’t really know. I have some ideas though.
- I could use this approach to make a highly efficient genetic fractal engine that converts binary genetic strings into genetic fractals. I can then develop an script interpreter that does the high level complex stuff. This would be a valuable change from the current architecture where the complex genetic fractal engine is mixed up with the rest.
- A few posts ago I raised the idea of genetic agents. At present I’m bringing genetic fractals into the real world using desktop manufacturing techniques such as CNC and 3D printing. Binary genetic fractals would be much easier to implement in genetic agents at a hardware level.
- The most promising avenue is that I want to add intelligence to these genetic fractals and get them to respond their environment. It is easy to see that a binary genetic fractals that only understands left, right and split, is easier to get to respond to bumps into walls, light sources etc. than its sophisticated descendant like the coffee mug program above.