As built

Where the boundary moved

Three phases ago this site drew a line around what it computes and listed one thing on the far side as a gap rather than a boundary: interference between links, which needed no new physics, only a body and a test. Here is what that turned out to cost and what it turned out to open.

Assumes What is still outside.

The boundary essay draws a line around what this site computes and defends where it is. Most of what is outside is outside for one reason: it needs a force, and this site does not have one. Deflection, friction, wear, inertia, contact pressure — all of them require knowing what pushes on what and how hard, and none of them can be got from a geometry.

One item on that page was filed differently, and it was filed carefully:

Interference. Whether two links collide is also geometry, and it is the one obvious geometric question this site does not answer, because a link here is a distance constraint and has no width. That is a real gap rather than a boundary: it needs no new physics, only a body attached to each link and a collision test, and it would catch a class of design error the current figures cannot see. Naming it as a gap rather than as an exclusion is the honest filing.

That is right in every clause and it is an understatement in one of them.

crank rocker: the closest pair at one positionThe site's standard four-bar: ground 4, crank 1, coupler 3.5, rocker 3. Every joint is where the solver put it, exactly as in the linkage field; the material is the only thing added. The heavy segment joins the two closest points over every pair of parts that is tested — which excludes pairs sharing a pin, since their material surrounds that pin by construction — and its length is the gap: **-0.4292** here, between coupler · frame. A negative value is a penetration depth, the distance the pair would have to be moved apart, and it is drawn in the warning colour.gap -0.4292positioned by solving, not by drawing
Fig. 1 The class of design error the current figures could not see: the site’s own four-bar, drawn from the same solve, with its links given a width.

What it took

A body attached to each link and a collision test. Both of those existed already: interference.js arrived with the applied field to answer two questions about parts a reader owns — a cabinet door against its carcase, a wheel in its arch — and it holds the convex polygon, the signed clearance and a sweep.

What was missing was three things, and they took an afternoon between them: shapes that are not convex, so that a bell crank is a part; the decomposition that makes them answerable; and a rule for which pairs of a mechanism are tested at all. The rest of the field is what those made askable.

So the estimate in the boundary essay was accurate about the cost. It was wrong about the size of what was on the other side, and the error is instructive: it estimated the work and not the subject.

The gap is a function, and it has corners. The smallest gap over every tested pair, at each of 360 solved positions of the crank. Two things are visible that a check at the ends could not report. The minimum, 0.1041, is in the middle of the travel and not at either end. And the curve has 4 corners, each one a change in which pair is closest — the colours — so the function is piecewise smooth rather than smooth, and its minimum is not where a derivative vanishes. Refining off the sample grid by golden section moves the answer by 1.4e-5, which is what a corner rather than a smooth minimum looks like.
Fig. 2 A clearance is a function with corners: the first of the nine things behind the gap.

What was on the other side

Nine things, and not one of them is a force.

A clearance turned out to be a function with corners — piecewise smooth, with a kink at every change of closest pair, so its minimum is not where a derivative vanishes and is not at either end of the travel. A sampled sweep turned out to need a certificate, because twelve samples of a crank passing a stud report a gap of +0.007 while the crank is 0.010 inside it, and the repair is a Lipschitz bound rather than more samples.

A planar mechanism turned out not to be planar: not one of nine machines fits in a single plane, and the four-bars need three rather than two. Assigning the planes turned out not to be a graph colouring, because a pin joining two planes passes through the ones between them — of the six proper three-plane colourings of a crank rocker, two can be built.

A machine turned out to occupy a region, whose area needs two quadratures and a closed form to be believed, and to need a box twenty per cent larger than its joints suggest and to fill half of it. Free space turned out to come in pieces, so that a mechanism can have configurations it reaches and cannot get to, bounded by collisions rather than by singularities.

Grashof’s condition turned out to answer a second question with the opposite sign: every four-bar that turns all the way round sweeps a link over one of its own ground pivots, and the ones that can be made of thick material are the ones that only rock. Synthesis turned out to have a fourth defect, one that no sweep can find because it is decided before the mechanism moves. And a follower turned out to need a face whose width is the range of ds/dθ and nothing to do with the lift.

None of that was foreseeable from the sentence that named the gap. All of it follows from it.

What the convex hull adds. The cheap way to give a dented part a body is to take its convex hull, which needs no decomposition and is what a great deal of collision code does. On this bell crank the hull is 105% more material than the part, all of it in the notch — and the error only ever goes one way, since a hull adds and never removes. The small block sits in that notch, clearing the real crank by 0.020 and interfering with its hull by -0.120. A design rejected on that reading is a design rejected for a shape nobody is going to make.
Fig. 3 The arrangement that found the bug: a probe in a bell crank’s notch, tested against the crank’s own convex hull.

The bug that came with it

Closing a gap moved a bug as well, and it belongs in this record because it is exactly the kind of thing a boundary is meant to keep visible.

interference.js’s clearance routine decided apart by the smallest distance between an edge of one shape and an edge of the other, and returned it. That is correct for every arrangement the applied field ever asked about — a door and a carcase, a wheel and an arch, a coupler and a post — because those meet edge first. It is wrong for one arrangement: a shape entirely inside another crosses none of its edges, so the smallest edge distance is positive and the routine reported a comfortable clearance for a part buried in another part.

The case turned up within an hour of the new field starting, in a figure comparing a bell crank against its own convex hull, and the repair is one line and one point: if either polygon’s first vertex is inside the other, run the depth branch whatever the edge distance says.

The fix went where the bug was, in the shared routine, and not in the new field’s own code — because the same routine draws the cabinet door and the wheel arch and would have gone on being wrong about them the first time either was asked about something nested. The nested case had never come up there. It was going to.

That is the second half of what a boundary is for. It records not only what is outside but which code answers what, so that a defect found by a new question can be put back where the old ones will benefit.

The bound that says the sweep missed nothing. Every corner of every body is an affine function of its link's two joints, so its speed is the same combination of the joint velocities the mechanism already solves for — and the largest corner speed anywhere on this drive is V = 1.255 per radian. A distance between point sets is 1-Lipschitz in those points, so from each sample the gap can fall no faster than V: the fine lines are those cones. Where two cones cross is the least the gap can be between the samples, and at 60 samples that is 0.0383 — positive, so nothing was missed. The same bound refuses the twelve-sample sweep of the stud machine, where the bound is -0.281.
Fig. 4 A second: a Lipschitz bound saying what a sampled sweep can have missed between its samples.

The inventory, revised

The boundary essay ends with an inventory so that the line is checkable. Three of its entries change.

Computed and asserted here gains: the signed clearance between two parts, convex or not; the gap as a function of a drive, with its minimum bracketed and its corners counted; a Lipschitz certificate that a sampled sweep missed nothing; the conflict graph and the fewest planes a machine can be assembled in, with the pin-ordering condition; the region a machine sweeps and the box it needs; the free arcs of a drive and their count; the widest link a four-bar admits with bearings at both pivots; and the pin spacing a synthesis leaves.

Named and not computed loses interference between links, which was its first entry.

Computed elsewhere and taken as input stays empty. Every number in this field comes out of code in this repository, which is what makes the line drawable at all.

What did not move

The eight disclaimers stand, and the field is careful to end where they begin.

A negative clearance here says the mechanism as dimensioned cannot be made of solid material. What a real one would do about it — bind, spring, wear a groove, break — is outside, and every one of those is a force. A contact in this field is a failure, and the holding field’s contact is a constraint: two fields using the same word for touching and meaning opposite things by it, distinguished by whether the touching is intended.

Nothing here has mass, so nothing here is dynamics. Nothing here is manufactured, so fillets, draft, tool access and how a part is held while it is cut are all outside. Nothing here deflects, so a machine that is geometrically clear by a hair is called clear.

And one new disclaimer, which the field needed and the boundary essay could not have anticipated: every region here is a plane region. The real machine is a stack of plates as deep as its plane count, different links are in different plates, and the honest solid is a union of prisms rather than a footprint extruded. That object is computable from what is here and is not computed.

crank rocker: the closest pair at one positionThe site's standard four-bar: ground 4, crank 1, coupler 3.5, rocker 3. Every joint is where the solver put it, exactly as in the linkage field; the material is the only thing added. The heavy segment joins the two closest points over every pair of parts that is tested — which excludes pairs sharing a pin, since their material surrounds that pin by construction — and its length is the gap: **0.1494** here, between coupler · frame. A negative value is a penetration depth, the distance the pair would have to be moved apart, and it is drawn in the warning colour.gap 0.1494positioned by solving, not by drawing
Fig. 5 What a planar mechanism turns out to be: a stack of parallel planes, with the pins as columns through it.

What the older fields gain

A new field usually leaves the older ones alone. This one changes what four of them can say, without changing a single number any of them computed.

The linkage field can now say that its four-bar needs three planes and cannot be built with bearings at both pivots — which is not a correction of anything it computed, since every position, angle and ratio in it is unchanged, but is a fact about the object it was drawing.

The practice field gains the other half of a pin. Its pin is a hole with play, and everything it computes is about slop; this field’s pin is a cylinder with material round it, and everything it computes is about room. Neither is derivable from the other and the same joint has both.

The synthesis field gains a fourth defect, and it is the first one on this site that a simulation cannot find: a mechanism with two pins on top of each other sweeps perfectly, because in the equations they are points.

And the applied field gets its hinge arms back. That essay says in as many words that its arms are still lines and names the clearances that leaves unchecked, because the machinery refused a non-convex body. The refusal was right, the gap was recorded, and the shape of the repair was written down at the time.

The box the joints need, and the box the machine needs. Every machine in the catalogue, measured twice over the same drive: the extent of its joint positions, which is what a site drawing links as lines can report, and the extent of its material, which is what has to fit in something. The ratio runs from 1.13 to 1.36 — between thirteen and 36 per cent more area than the skeleton suggests, on machines whose links are a twentieth of their length wide. The last column is how much of the material's box the swept region actually fills, and it is where the packaging argument really is: a machine at 50% is a machine with a great deal of room inside its own envelope that nothing may be put in.
Fig. 6 And a fifth: how much room a machine needs, which sounds like an industrial question and is a bounding box over polygons.

Two things that sounded outside and were not, again

The boundary essay makes this move twice — for assembly, which is whether the constraint equations have a real solution, and for interference, which it then files as a gap. This field adds two more of the same kind, and both were within reach the whole time.

Packaging. How much room a machine needs sounds like an industrial question and is a bounding box over a set of polygons. It needed a body on each link and nothing else.

Buildability of a layered assembly. Whether a set of links can be put into planes so that nothing overlaps and no pin goes through anything sounds like a detailing question and is a graph problem with an ordering condition. It needed the conflict graph, which needed the bodies.

Both of them read, from outside, like the sort of thing a drawing office does rather than the sort of thing a solver answers. Both are decided entirely by geometry, both are computable before anything is made, and neither was on the boundary essay’s list in either column — which is the interesting failure. They were not excluded and they were not named as gaps. They were not thought of, because there was no vocabulary in which to state them.

What the field did not take, and why

Three things were within reach and were left, and each is left for a stated reason rather than by omission.

The exact swept boundary. The region a machine occupies is computed as an occupancy grid, and its boundary is a staircase at the cell scale. The exact boundary is a patchwork of corner loci and edge envelopes — ordinary curvature-field objects — and constructing it needs a tangency condition solved per edge and the pieces intersected. It would give a smoother picture and the same area to three figures, and the grid gives both the number and the picture from one idea.

The solid stack. Named above and left for the same reason: it needs a thickness, a clearance and a retention scheme, none of which this field carries, and adding them would put three parameters into every figure to produce one number.

And the inverse problem. Given a region to keep out of, find the mechanism — which is the synthesis field run against a body constraint rather than a position one. It is a real question, it is much harder than it sounds, and nothing here goes near it.

Naming all three is the same discipline the boundary essay applies to force: a reader should be able to tell what was decided against from what was never considered.

What would move the line again

The boundary essay has a section under this title and its answer is that the line moves when a quantity becomes computable from what the site already has, rather than when somebody decides to be braver. This field is an instance and it suggests two more, both of them geometry.

A solid model. Everything here is polygons in a plane, and the plane count is an index rather than a height. Give the plates thicknesses, the pins lengths and the heads sizes, and the depth of a machine becomes a number rather than a count, and a spatial mechanism’s links become bodies that sweep volumes. That is a large piece of machinery — a convex decomposition in three dimensions, a separating-axis test on polyhedra — and it is the same subject one dimension up.

Path planning. Free space in pieces raises the obvious next question: given two configurations in the same component, drive between them. For a one-freedom mechanism that is trivial — go along the arc — and for an arm with three joints it is a real question about a set in a three-torus. It is also a subject with an enormous literature about algorithms, and this site is not about how long a computation takes, so what would be taken is the geometry: what the free set is, how many pieces, what bounds them.

Neither is a promise. Both are the shape of thing that moved this time: a quantity that the existing machinery could produce and nobody had asked for.

crank rocker: the closest pair at one positionThe site's standard four-bar: ground 4, crank 1, coupler 3.5, rocker 3. Every joint is where the solver put it, exactly as in the linkage field; the material is the only thing added. The heavy segment joins the two closest points over every pair of parts that is tested — which excludes pairs sharing a pin, since their material surrounds that pin by construction — and its length is the gap: **-0.4320** here, between coupler · frame. A negative value is a penetration depth, the distance the pair would have to be moved apart, and it is drawn in the warning colour.gap -0.4320positioned by solving, not by drawing
Fig. 7 The mechanism the gap was about, drawn the way twenty-three fields drew it and the way this one does.

How long the gap stood, and why that is the interesting number

The gap was named on the day the boundary essay was written and closed three phases later. In between, five fields were added — wheels, shapes as unknowns, members that pull, assemblies of many of one thing, contacts that only push, the connections themselves, the joints themselves and demands given as equations — and every one of them added mechanisms whose parts nobody asked to be made of anything.

That is not negligence. Each of those fields had an object of its own that was genuinely new, and the standing rule for choosing a phase is that its object should be one the site cannot currently state. The width of a link was statable the whole time and was not interesting in the way those objects were, right up until it was measured — at which point the site’s own four-bar turned out to be unbuildable in the plane it had been drawn in for twenty-three fields.

The number worth carrying is therefore not three phases. It is that a gap named honestly, with its reason, stayed findable for three phases and was closed by reading the list rather than by remembering it. That is the whole return on writing the boundary essay in the first place.

Free space, in pieces. The driving angle round the circle, with the arcs at which the machine is both assembled and clear drawn heavy. One stud in the way takes a bite out of the turn and leaves 1 arc: the crank can still reach every remaining angle by going the other way. Two studs leave 2, covering 74% of the turn — and every configuration in both arcs is a perfectly good solution of the same constraint equations, on the same assembly branch, at the same mobility. Nothing a solver computes distinguishes an angle in one arc from an angle in the other; what separates them is that the machine cannot be driven from one to the other.
Fig. 8 A sixth thing behind the gap: a free space that comes in pieces.

The honest reading of a boundary

There is a general lesson in this and it is not that the boundary was drawn badly. It was drawn well: the distinction it makes between an exclusion and a gap is exactly right, the item that moved is the one it flagged, and the reason it gave for the move being cheap was correct.

What it could not do was see the size of what was behind the gap, and no boundary essay can. A gap is named from the inside, in the vocabulary of the fields that exist, and the reason it is a gap is that the vocabulary for what is behind it has not been built yet. Interference between links was the largest true sentence available; a clearance is a function with corners over a drive, with a certificate, in a stack of planes was not sayable at the time and is what was actually there.

So the practical form of the lesson is modest. A gap is worth closing sooner than its estimated size suggests, because the estimate is made in the wrong vocabulary and is systematically low. And the record of having filed it honestly — as a gap rather than as an exclusion, with the reason — is what made it obvious three phases later which one to close.

About the same objects

Not linked from either essay — found by the objects both name.

What links here

Essays that link to this one from their own argument.

The objects this essay names

Each one links to every other essay that touches it.

Conserved quantityFree spaceInterferenceLayer assignmentLink bodyMisconceptionSigned clearanceSwept region