The pattern itself

Recovering the angle from the counts

Build a head at a stated divergence angle, forget the angle, and get it back from the spiral counts alone. Four angles, worst error twelve thousandths of a degree — and the only thing that crossed between the two halves was a list of coordinates.
14 min read 8 figures The round tripCounted, not admired

Worth reading first: Counting the spirals.

A generator that only ever runs forwards proves nothing about itself. Feed it an angle, get a pattern; the pattern looks like a sunflower; there is no way to tell from it whether the machinery did what it claimed.

So the machinery runs backwards as well. A head is built at a stated angle, the angle is set aside, and a second piece of code — which has never been shown it — is handed the spiral counts and asked which divergence angle produces them.

It gets the angle back to about a hundredth of a degree.

A round trip on four heads of 900 primordia: the divergence angle recovered from each. The counter is shown the points and nothing else. The worst recovery across the four is 0.012°.
Fig. 1 Four heads at four stated angles, the counts taken from the points, and the recovered angle beside each. The worst error across the four is 0.012°.

The relation it uses

The recovery rests on one piece of lattice geometry.

In a Vogel head the point i sits at radius √i, so stepping j places back moves a point by two things at once. Around the disc it moves by the fractional part of j·δ turns, which is an arc of 2πr times that fraction. Outward it moves by roughly j/2r in model units, because the radius is a square root.

The hop for offset j is the hypotenuse of those two, and the parastichy numbers are the offsets with the shortest hops. So given observed counts m and n at a known radius, the recovery asks: for which divergence angles are m and n among the shortest? That has a genuine interval of solutions, and the centre of the interval is the answer.

Both quantities the relation needs are read off the point set rather than taken from the model. The radius is the middle of the band that was counted. The scale comes from the density, since Vogel’s model puts an equal area around every point.

The cost function that had no geometry in it

The first version scored candidate angles by how nearly m·δ and n·δ landed on whole turns, without the radial term.

It was minimised at δ ≈ 0. At zero every multiple is a whole number of turns, so the score is perfect — and the “lattice” is a single radial line with every point on top of every other. The recovery confidently returned 0.0018° for a golden-angle head.

The mistake is worth naming because it is a common shape. The angular condition is necessary for an offset to be a parastichy number and it is not sufficient: the offset also has to be small enough that the radial hop does not dominate. Leaving out the term that grows with j left a cost function whose minimum was a degenerate configuration, and degenerate configurations are exactly where an incomplete cost function goes.

Adding the radial term fixes it, and it fixes it for a reason rather than by tuning: the term is not a penalty introduced to avoid a bad answer, it is the second component of a distance that was always there.

A round trip on four heads of 400 primordia: the divergence angle recovered from each. The counter is shown the points and nothing else. The worst recovery across the four is 0.035°.
Fig. 2 The same round trip on heads of four hundred points. The relation the recovery uses has no free constant in it, so a smaller head changes what the counts are and not how they are inverted.

When the recovery refuses

Two cases, and both are informative rather than annoying.

Non-coprime counts. If the two counts share a factor, no single divergence angle is recoverable. That is not a failure — it means the pattern is whorled rather than spiral. A divergence angle near a simple fraction of a turn produces radial rows, and a head at 137.0° counts as 21 and 42, because 137.0 is within a whisker of 960/7. Twenty-one and forty-two share a factor of 21, and what the pattern really is is seven rows of something. The recovery says so and stops.

No consistent angle. If the counts cannot both be among the shortest offsets at that radius for any angle, the recovery refuses. That is what caught the counter returning the two smallest offsets rather than the two shortest — fed 21 and 34 at a radius where the true neighbours are 34 and 55, no angle works, and the refusal was the only signal that anything was wrong.

The interval, and why it is reported

The recovery returns a width as well as a centre, and the width matters.

Two small counts constrain the angle loosely; two large ones constrain it tightly. A pair like 8 and 13 pins the angle to within a degree or so; a pair like 55 and 89 pins it to a few hundredths. That is a real property of the problem — a coarse pattern carries less information about its generating angle than a fine one — and reporting a single number without it would overstate what a count can say.

A round trip on four heads of 600 primordia: the divergence angle recovered from each. The counter is shown the points and nothing else. The worst recovery across the four is 0.007°.
Fig. 3 Six hundred points. The interval the recovery reports is set by how large the counts are, and larger counts come from larger heads — which is the trade this section describes.

It also sets a limit on what any measurement of a real plant can establish. A pine cone with 8 and 13 parastichies is consistent with a range of divergence angles a degree wide, and no amount of care in counting narrows it. Distinguishing 137.5° from 137.9° needs a head with high counts, which means a large one.

What the round trip proves

The agreement is to about a hundredth of a degree across four quite different angles, and it is worth being precise about what that establishes.

It proves the forward generator and the backward recovery are consistent, which is a real thing to have proved. A sign error in the lattice geometry, a confusion between turns and degrees, or an off-by-one in the birth order would all break it, and every one of those leaves a pattern that looks exactly like a pattern.

It does not prove that Vogel’s model describes any plant. Two consistent implementations of the same wrong idea agree perfectly. That is why the site carries checks that come at the geometry from other directions — the counter shown to find rows in a rational lattice, the packing measured against several criteria that disagree, the angle produced by a dynamical model that was never told it.

And it does not prove anything about a photograph. Recovering an angle from a real head would need the counts, the radius they were taken at, and the model’s scale, and real heads are noisy in all three.

The same shape, three times over

This is the third instance of a pattern that has appeared here often enough to be worth naming.

Generate something from a stated parameter. Forget the parameter. Recover it by a computation shaped differently from the one that made it, with the original hidden behind an interface narrow enough to inspect. Compare.

A crystallography site generates a pattern, forgets which symmetry group produced it, and rediscovers the group. A perspective site draws a box from a camera and recovers the camera’s focal length from the drawn edges. Here a head is built from an angle and the angle comes back out of the spiral counts.

In each case the value is not in the forward computation, which is easy. It is in the fact that a second computation with a different shape had to arrive at the same answer with the first one’s workings hidden — and in each case the round trip found a bug that nothing else did.

What it costs

Very little, which is worth saying because the case for round trips is usually made on principle rather than on price.

The forward generator is two lines of trigonometry. The recovery is a scan over candidate angles with a hypotenuse at each, and it runs in a few milliseconds. Both run on every figure that uses them, so a change to the lattice geometry that breaks the correspondence stops the figure being drawn at all rather than producing one that is wrong in a way nobody can see.

A round trip on four heads of 1200 primordia: the divergence angle recovered from each. The counter is shown the points and nothing else. The worst recovery across the four is 0.013°.
Fig. 4 Twelve hundred points. Every step of the round trip is the same two lines of trigonometry forwards and one minimisation backwards, whatever the head holds.

That is the argument in one sentence. The failure being guarded against is not a crash; it is a pattern that looks entirely convincing and was generated by a rule with a bug in it, which is the ordinary condition of illustrations in this subject.

What the recovery returns when it should refuse

A measurement that always produces a number is not a measurement, so the recovery is built to decline.

Handed a pair of counts that no divergence angle can produce at the stated radius, it returns nothing rather than the least-bad candidate. The commonest such input is a non-coprime pair — 34 and 68, say. Parastichy numbers of a genuine lattice are coprime, because a common factor means the two families do not generate the lattice and the pattern would have a symmetry that a spiral head does not have. Fed 34 and 68, the recovery declines.

That behaviour is not decoration. It is what caught the worst bug this site’s machinery has had.

The two spiral families a counter finds between 0.68 and 0.92 of the radius34 spirals one way and 55 the other, found from the point positions alone — the counter is never told the divergence angle.34 and 55 spiralscounted, not assumed
Fig. 5 The input to the recovery. The counts come from the polylines joining every 34th and every 55th point, which is a fact about which points are neighbours rather than a curve fitted to a picture.

The bug the refusal caught

The spiral counter originally returned the two smallest offsets that were local minima, rather than the two shortest hops. On a head whose true neighbours at the counting radius are 34 and 55, it returned 21 and 34.

Nothing about the picture revealed this. The figure drew twenty-one spirals and there were twenty-one of them; the count matched the drawing, because the drawing was made from the count. Every visual check passed. Both numbers are Fibonacci numbers, which is what one expects to see, so even a suspicious reader would have nodded.

The recovery caught it by refusing. Asked which divergence angle makes 21 and 34 the shortest offsets at that radius, it found none — because at that radius they are not, and 21 has been superseded. The failure was not a wrong number; it was a declined answer where an answer was expected, which is a much louder signal.

The general form of this is worth naming, since it recurs across this site’s tools. A forward generator and a backward recovery share no code, so a bug in one shows up as a disagreement rather than as a consistent wrong answer. And a recovery that can refuse turns “disagreement” into something that cannot be read as noise.

The interval, and why the centre of it

The recovery does not return a point. It returns an interval: the set of divergence angles for which the given offsets are the two shortest at the given radius, which is a genuine range because a lattice is stable under small changes of angle.

The reported value is the centre. That is a choice, and it is defensible for a reason worth stating: the interval is where the counts are consistent with the angle, and its centre is where they are most robustly so — the angle furthest from any nearby value where the counts would change.

The width of the interval is the uncertainty of the measurement, and it shrinks as the counting radius grows, because higher offsets pin the angle more tightly. That is the same effect as the counts changing with radius, read as a statement about precision: counting at the rim of a large head gives a better estimate of the angle than counting near the middle, and the improvement is computable in advance.

A round trip on four heads of 1600 primordia: the divergence angle recovered from each. The counter is shown the points and nothing else. The worst recovery across the four is 0.020°.
Fig. 6 Sixteen hundred points, the largest drawn here. The reported value is the centre of the interval, and the interval narrows as the counts the head can offer get larger.

Reading it back onto real material

The recovery’s practical use is that it turns a photograph into a number.

Given a picture of a seed head, one can count spirals in an annulus, measure the annulus radius as a fraction of the head radius, and estimate the number of primordia from the density. Those three inputs are what the recovery needs, and they are all obtainable with a printed image and patience.

What comes back is a divergence angle with an uncertainty, which is a far more useful description of the plant than a pair of counts — because the angle is the model’s output and the counts are a radius-dependent consequence of it.

It also makes the interesting question askable. A plant on the Lucas branch has an angle near 99.5° and counts of 47 and 76, and someone who only ever records counts will file that as an anomaly. Someone who recovers the angle will notice it is a second attractor of the same model, which is a different sort of fact.

What round-tripping is worth, generally

The pattern this essay demonstrates is the site’s main methodological commitment, and it generalises past divergence angles.

Take a model that turns a parameter into a form. Build the form, discard the parameter, and recover it with independent code. Three things become true that were not true before.

A bug produces a disagreement rather than a consistent wrong answer, because two independent implementations rarely fail the same way.

A check can refuse, which is a much louder signal than a wrong number, and is what caught the counter’s error.

And the claim becomes about the data, since the recovery sees only what a reader could see — coordinates, counts, radii — and not the model’s internals.

The growth-factor fit, the exponent fit and the spiral counter are all the same construction, and where a site has no round trip available it is worth saying so rather than letting a forward generator’s output pass as evidence about itself.

The inputs, and how much each one matters

Since the recovery is meant to be usable on real material, the sensitivity to each input is worth stating.

The counts matter most and are the easiest to get wrong, because a miscount by one selects a different offset entirely and the recovery will either return a distinctly different angle or refuse. That is a good failure mode: a wrong count rarely produces a plausible wrong angle.

The radius matters moderately. It enters through the lattice chord, and a ten per cent error in the counting band’s radius shifts the recovered angle by a small fraction of the interval width — enough to widen the uncertainty, not enough to change the answer.

The point count matters least, since it only sets the scale through the density and Vogel’s model gives every point equal area. An estimate within a factor of two is sufficient.

A round trip on four heads of 300 primordia: the divergence angle recovered from each. The counter is shown the points and nothing else. The worst recovery across the four is 0.075°.
Fig. 7 Three hundred points, the smallest. The claim that the point count matters least of the three inputs is the claim these five figures are drawn to be read against.

So the practical advice is: count carefully, measure the radius roughly, and estimate the total loosely. That ordering is not obvious in advance and it is the sort of thing a sensitivity check produces and intuition does not.

The same problem on a cylinder, where it closes

Expansion built the cylindrical version of this recovery, and the comparison says something about why this one returns an interval.

On a stem, two counts and two hop lengths determine the lattice exactly: the divergence and the rise come back with residuals around 10⁻¹³, which is the floating-point floor rather than a tolerance that was met.

The extra information is the hop lengths. On a cylinder the lattice is genuinely periodic, so the distance between node i and node i+m is the same everywhere on the stem and its median is that number. On a disc the same hop is longer near the centre than at the rim, so its median across a counting band is an average over a changing quantity — which cannot be fed to an exact solver without producing an exact answer to a question nobody asked.

Narrowing the band until the lattice stops changing would fix that, and it cannot be done: a band narrow enough to freeze the lattice holds too few points to count in. The two requirements pull opposite ways on a disc and there is nothing to freeze on a cylinder.

So the interval here is not a shortfall in effort. It is what the geometry supplies, and the honest thing is to report its width — which is why the width is printed alongside the centre rather than left out.

How much a count constrains, without any recovery at all

This page recovers a divergence angle from counts and hop lengths. The work after it asked the weaker question — what the counts alone pin down, with no lengths, no radius and no recovery — and the answer has a law in it.

A reported pair leaves open a band of divergence angles about 221°/mn wide, where m and n are the two counts. Measured up the Fibonacci ladder: 38.85° for 2/3, 5.534° for 5/8, 0.811° for 13/21, 0.118° for 34/55, with the product width × mn coming out 233, 216, 221, 221, 221, 220, 221. The same constant appears on the Lucas pairs, which share no members.

A count of m and n pins the divergence to 221°/mn. Each dot is one reported pair, and its height is the total width of the divergence angles that could have produced it at some rise. 2/3 leaves 38.8° open; 34/55 leaves 0.118°. The line is 221°/mn, taken from the three highest pairs and drawn back through the rest.
Fig. 8 What each reported pair leaves open. Every rung of the ladder is worth a factor of φ² in what the count pins down, which is the same φ² that spaces the rungs.

So a bare count is not the weak evidence it looks like, provided the count is high. What this page’s machinery adds on top of that is the hop lengths, which close the recovery exactly on a cylinder — and the comparison shows where that exactness is worth having and where a count taken further out would have done.

What links here

Computed from the collection, not written here: the essays that point at this one.

Reads more easily once this is understood

Essays that name this one as worth reading first.

Shares its objects with

Essays that name at least two of the same things, and that neither author linked.

Named objects

A flat tag is an object no other essay names yet.

AnnulusBranchCoprimeCylinderDivergence angleFibonacciInterval estimateLattice chordParastichyRound tripWhorled pattern