Solving every face at once
The condition that is not flat-foldability built the general developable quadrilateral mesh — both crease families free to bend — and asked what makes one fold rigidly. The answer was a loop: go round one quadrilateral face, solving each of its four vertices in turn from a fold angle, and come back to the crease the walk started at. On a mesh that folds, the number that returns is the number that left.
That rung could solve one loop. A three-by-three mesh has exactly one, and tuning a single free length until the residual crosses zero produced a mesh with no straight crease family, no two vertices alike and no symmetry, closing to 10⁻¹³ at every fold angle.
A four-by-four mesh has four loops, and they are not independent: the faces share creases, so moving a length to close one opens another. A coordinate descent — each length driven to its own root in turn — got from 0.32 radians to 0.038 and stopped, and the many-face solve was left recorded as owed.
The condition is not the four faces
Before the solve, a correction, and it is the kind that would have made the whole exercise produce a plausible wrong answer.
A face’s loop residual is the best its own sixteen branch chains can do. A degree-four vertex has two configurations at any fold angle, so going round four vertices offers sixteen ways, and the residual reported is the smallest gap any of them leaves. Four faces can each close on a chain of their own and share no vertex configuration whatever — and then every face equation reads zero and the sheet has no folded state at all.
That is not hypothetical. The first version of this solve drove all four face residuals to 10⁻¹⁴ and produced a mesh on which the propagation — fix one fold angle, solve every vertex, require them all to agree — found nothing.
So the residual that is actually solved is a propagation. Vertices are visited in order; each is solved from a crease it already knows; the branch is chosen so that everything else it knows agrees; and the mismatch left on creases already decided elsewhere is the residual. There are exactly as many of those as the vertex adjacency graph has independent cycles — four on a four-by-four mesh — so the equation count is unchanged and the meaning is not.
This is the same local-against-global failure the flat-folding half of this site has met four times, arriving on the rigid side. Every vertex can pass and the sheet still fail; every face can close and the sheet still not move.
How many conditions a mesh of any size has
The equation count is stated for this mesh and it generalises in one line, which is worth having because it says where the method runs out.
The residuals are one per independent cycle of the vertex adjacency graph. An mesh of faces has interior vertices in a grid graph with edges, so the cycle count is
which is simply the number of interior faces of that graph. One at , four at , nine at five, sixteen at six — and the first two are the two this ladder has actually solved.
Which says the problem changes character with size
The conditions therefore grow as the area of the mesh. The lengths a walk parameterisation leaves free do not: a walk fixes the interior from a boundary, so the free lengths grow with the mesh’s perimeter, linearly in . This mesh has twenty of them at .
Two quantities growing at different rates cross, and the crossing is what matters. If the free lengths continue at the rate this mesh shows — five per unit of — then overtakes at
So somewhere around a nine-by-nine mesh the conditions outnumber the lengths available to satisfy them, and beyond that a general developable quadrilateral mesh that folds rigidly is not merely hard to find — it is over-determined, and a generic one has no solution at all.
That is a prediction rather than a result, and it rests on the linear rate being read off a single size. What it does explain is a fact about the literature that otherwise looks like a shortage of effort: every large rigidly foldable quadrilateral mesh anybody uses is a Miura or a near relative. Those satisfy their conditions by symmetry, so the equations are redundant rather than solved, and redundancy is the only thing that survives an area of conditions against a perimeter of unknowns.
Why the descent could not do it
It is worth being exact about what failed, because “coordinate descent stalls” is the kind of sentence that could mean anything.
The residual round a face is a function of every length in that face’s neighbourhood. Driving one length to a root of it is a one-dimensional problem and the previous rung solved it by scanning for a sign change and bisecting. With four faces, each length appears in one, two or four of the four residuals, so a step that zeroes one residual moves the other three — and the descent’s next step, taken on a different residual, moves the first one back.
That is not slow convergence. It is a fixed point of the descent that is not a solution of the system: a configuration where every single-coordinate move makes some residual worse, with all four residuals still finite. The descent stops because it has nowhere to go one coordinate at a time, and the direction it needs is a combination of several.
Solving them together
The method is a damped Gauss–Newton step with a numerical derivative, taken in the row space so that the mesh moves as little as the equations allow. That last detail is not tidiness: a solver free to move every length wherever it liked would return a mesh nobody would recognise as a modification of the one it was given, and the before-and-after figure would be two unrelated pictures.
From a mesh drawn at random with a mismatch of 0.066 radians, it closes all four conditions together to 8.5 × 10⁻¹⁴. Every interior vertex is still developable and Kawasaki-exact to 9 × 10⁻¹⁶, which the solve never asked for and gets from the family it moves in — the parameterisation is a walk of the Kawasaki condition, so every mesh it can reach is flat-foldable at every vertex by construction.
Four of eight random starts converge. The other four stall between 0.026 and 0.049 radians, and there is no reason to think the meshes near them do not fold — the control says the solver is capable and the stall is a solver’s stall. A Miura built inside the same parameterisation, with every one of its twenty lengths then changed by six per cent, is recovered to 10⁻¹³, which is what makes the failures worth reporting rather than hiding. That control is also the answer to an obvious worry: a solver that only ever finds meshes near the one it started at would be reporting its own starting point, and this one starts at a Miura and lands more than a radian away from it.
What it lands on
The solved mesh is not a Miura in disguise. Its nearer crease family runs 1.21 radians off straight at its worst vertex, against 5 × 10⁻¹⁵ for a Miura — which is to say that neither family runs straight through anything, and the mesh is squarely in the class mesh.js was written under an assumption to avoid.
The four converged seeds land at 1.21, 1.36, 0.80 and 0.84 radians off straight. They are four different meshes, not four routes to one.
That picture is the strongest evidence in the essay and it is worth saying why. The closure conditions are statements about angles; nothing in them places a panel anywhere. Building the folded object is a separate computation with its own conventions, and it closes a loop the equations never mention: four panels arriving at a vertex from four directions, required to agree about where the vertex is. A mesh that satisfied the angle conditions and failed that test would be a mesh whose conditions were the wrong conditions.
Through the whole motion
A mesh that closes at the angle it was solved at has been fitted rather than folded, and the difference is the difference between a shape a sheet could be assembled in and a mechanism.
The solved mesh’s mismatch stays below 10⁻¹² at every fold angle from 0.2 radians to 2.4 — from barely creased to nearly flat — although the conditions were written at 0.6 and at nothing else. That is not an artefact of solving four equations rather than one: four conditions in twenty unknowns leaves plenty of room to satisfy them at one angle and nowhere else, and what would come out of a fit is a mesh that closes once.
The reason it does not is that the conditions have a one-parameter mechanism behind them. A degree-four vertex with a fixed flat pattern is a mechanism with one freedom, so specifying its fold angles at one position specifies the whole path; the loop closure is then a condition on the mesh rather than on the position, and a mesh that satisfies it at one angle satisfies it along the motion. Measuring it at eight angles is what turns that argument into a check.
How big the family is
Twenty free lengths, four conditions, and the derivative at the solution has full row rank — so locally the meshes that fold form a surface of dimension sixteen. They are not isolated points and they are not rare.
That reframes what was difficult. Nothing about these meshes was scarce; what was missing was a way to find one. The condition is a loop closure round each face, and nothing at a vertex can see it — so no rule that draws a mesh vertex by vertex, however clever, can arrive at a member of this family except by accident. The Miura and its relatives were reachable because they satisfy the condition for a structural reason that is visible locally: one crease family running straight through every vertex. That is also why flat-foldability at every vertex does not buy a rigid folding — the local conditions are satisfied by a whole family of meshes and the loop closure selects a thin subset of it.
Which theorem was checked, and how
Five things, and the fourth is the one that would be easiest to get away with omitting.
The starting mesh must not already fold, or the solve proves nothing; it is required to leave a mismatch above 0.02 radians. The solve must close every condition together. The solved mesh must still be flat-foldable at every vertex, which is a property the solve never optimises for. It must fold at every fold angle rather than closing once at the angle it was solved at — a mesh that closes at an isolated angle is a position the sheet could be assembled in and not a mechanism, which is the shape of an earlier result on a single vertex arriving on a whole sheet. And the derivative must have full rank, which is what turns “a solution exists” into “a surface of solutions exists”.
The barrier deserves its own paragraph because it is the failure the solve found first. A sheet whose creases are all unfolded satisfies every closure condition exactly, and so does one whose creases are unfolded everywhere except along a single straight line. Both are folded states of a different pattern — the one with those creases rubbed out — and a solver allowed to reach them will, because they are easy. The residual therefore carries a term that grows as any crease’s fold angle approaches zero, so a step towards the flat sheet reads as a step uphill.
Where the model stops
The solve is a local method and it behaves like one. It converges from a start that is near a solution and stalls from a start that is not, and half the random starts tried are of the second kind. Nothing here bounds how far a solution is from an arbitrary mesh, and nothing here says whether the four stalls have solutions nearby.
The result is also about a four-by-four sheet, which is nine interior vertices and four conditions. Larger meshes have more conditions than lengths eventually — a mesh of R by C has about R × C conditions and R × (C + 1) lengths — so the counting argument that makes solutions abundant here stops working at some size, and where it stops is not settled by anything in this essay.
What the picture cannot show
The before-and-after figure draws two crease patterns and the difference between them is a set of lengths. A reader cannot see which of the twenty changed, or by how much, and the honest answer is that all of them changed a little — the least-norm step spreads the correction across the whole mesh rather than putting it in one place.
Nor can the dimension figure show a sixteen-dimensional surface. It shows four numbers — how strongly each condition constrains the lengths — and the claim that sixteen directions are unconstrained is an arithmetic consequence of those four being nonzero rather than something in the picture. The folded pictures show one position of a mechanism. A mechanism is a curve of positions, and the still image is the same problem every figure of a rigid folding on this site has: what is being claimed is about a motion, and what is drawn is a moment of it.
The generalisation
The useful statement is about where a condition lives. Developability lives at a vertex; so does Kawasaki, and Maekawa, and the lemma. Rigid folding of a quadrilateral mesh lives on a face, and a face is the smallest object a vertex cannot see. That is why the whole apparatus of local tests — which decides flat-foldability at a point completely — decides nothing at all about whether a mesh moves.
It is worth putting beside what one crease decides: once a general mesh folds, fixing one fold angle settles every crease on it with exactly one consistent answer. So the sheet is enormously over-determined given that it folds, and enormously under-determined as a design problem, and the two facts are about different variables — the fold angles are determined and the lengths are not.
It also says what kind of search finds one. A property that lives on a loop is found by solving, not by constructing, because construction proceeds outward from what is already placed and a loop closes back on it. The Miura is the exception that proves the shape of the rule: it is buildable vertex by vertex precisely because its loop closure is guaranteed by a local property, and the price of that guarantee is that every vertex is the same vertex.
Who found it, and when
Rigid origami as a subject is Tachi’s and Belcastro and Hull’s, and the loop closure round a quadrilateral face is standard: the condition that a developable quad mesh folds rigidly is written in the literature as a compatibility condition on the fold angles around each face. The families that satisfy it — Miura-like meshes with a straight crease family, and the ones obtained from them by known constructions — are the ones anybody would build.
What this rung adds is the arithmetic of the general case at a size above one equation, and one number: sixteen. The solutions are a surface rather than a list, which is a different picture of the subject from the one a catalogue of named families gives.
Where the ladder goes next
Two directions, and one of them is a debt. The first is size: nine interior vertices is small, and what happens when the conditions start to outnumber the lengths is the question that decides whether large general meshes exist at all.
There is also a question the numbers here raise and do not answer: whether the four seeds that stalled are near solutions at all. A stall and an absence look identical from inside a solver, and separating them needs either a better method or a bound, and this rung has neither. What it has is a control — a mesh known to fold, moved off itself, recovered — which establishes that a stall is not automatic and leaves the four unexplained.
The second is what the solved meshes are for. A sheet with no two vertices alike that folds rigidly is a mechanism nobody could have drawn, and the questions a manufacturer would ask of it — starting with whether a solution survives being cut — — how accurately it must be cut, where to put the one actuator, what it does as it closes — are three separate rungs, and all three now have a mesh to ask them of.
What this makes readable
Essays that name this one as a prerequisite.
Named alongside this one
Essays reaching for the same objects. Nobody chose these; they are what the concept index makes visible.
- A loop takes choices away quadrilateral mesh · rigid folding
- Only four creases decide a Miura quadrilateral mesh · rigid folding
- The allowance is spent at the end quadrilateral mesh · rigid folding
- The deciding set does not move quadrilateral mesh · rigid folding
- The hardest instant quadrilateral mesh · rigid folding
What links here
The 8 essays that link to this one and share the most of its objects, of 9 that link here.
The objects this essay names
Each one links to every other essay that touches it.
DevelopabilityLoop closureMiuraQuadrilateral meshRigid foldingSolve