Bloom

A biomorph is nine numbers and a rule for turning them into a form. Dawkins' rule reads genes 1–8 as eight directions and gene 9 as how many times to branch. This page keeps the same nine genes and swaps the rule.

Here the genes are the coefficients of a trigonometric generator: four of them shape a cross-section, two lay out a backbone, one sets how big the cross-section is, one sets how far the copies wrap around the body, and gene 9 — depth in the tree rule — sets how many copies there are. Selection works the way it always does. The centre creature is the parent, the eight around it each carry one mutation, and clicking one makes it the parent of the next generation.

How the rule places a point

Nothing here is a creature model, and there is no randomness anywhere. Each frame plots thousands of points, and every one of them is fixed exactly by three numbers: which sample it is, which copy of the body it belongs to, and what time it is. A point's position is three things added together.

  1. A backbone. One horizontal cycle for every four vertical ones, which makes a closed curve with several lobes rather than an ellipse. The copies sit at points spaced along it, and the lobes are what read as head, body and limbs.
  2. A cross-section. A small shape built from four harmonics that beat against each other, added at whichever point of the backbone a copy sits on. Because the frequencies are related rather than arbitrary, the detail repeats without duplicating — which is what tissue does and what random noise does not.
  3. A swelling factor. The cross-section is multiplied by a number that runs between 1/d and d and never reaches zero, so the form expands and contracts without turning inside out. Its phase depends on the local geometry, so neighbouring regions swell by slightly different amounts instead of moving in lockstep.

Three separate clocks run at once: the cross-section deforms quickly, a pulse travels along the body at half that rate, and the whole form drifts around the backbone about fifty times slower still. Each copy of the body gets its own offset into those clocks, so the pulse arrives at one end before the other rather than the whole thing throbbing at once.

The image is a density map, not a line drawing. Points are plotted, not strokes, and where many of them land on the same spot it reads as bright and solid; where few land it stays wispy. The shading is just the count.

a=(m,d=mag(k=9*cos(i*5)*sin(i),e=cos(i*3)*cos(i*2)*9)**3/1999+1.5-sin(t/2+m)**3/3)=>point(99*sin(c=d/16-t/48+m)+k*(p=d**sin(d*d-t+m))+200,99*sin(c*4)+e*p+200) t=0,draw=$=>{t||createCanvas(w=400,w);background(9).stroke(w,96);for(t+=PI/20,i=1e4;i--;)a(i%16*13)}

The starting point: a p5.js sketch by @yuruyurau. Every constant in it that could be a gene now is one.

Click any of the eight offspring to select it. Generation 0.

One genotype, two rules

Tree rule
Field rule

Selection

Genotype

GeneField ruleTree rule

Gallery

Put them all in a zoo →