Systems that kept the measure

Two stations in one picture

A parallel floor under a perspective room found one map absorbing two centres into one sheet. Split a two-rule picture down the middle instead and each half hands back its own horizon — 7.80 px apart at a rule-mix of 0.02 — and no eye's position has anything to do with the gap, because an ordinary pinhole picture's recovered horizon does not depend on where the eye stood at all.

Worth reading first: A parallel floor under a perspective room · A picture with two eyes in it.

A parallel floor under a perspective room glued a system with no diminution to an ordinary reciprocal one and found that a single projective map absorbs both halves — badly, and without a distinguished member, but absorbs them. This essay was set up to ask a narrower question about the same sheet: recover a station from each half separately, on the reasoning that a picture drawn by two different eyes ought to disagree about where those eyes stood, and measure the disagreement.

That question turns out to have no answer, for a reason worth stating precisely before anything else, because it changes what is actually being measured below. A station-recovery routine handed an ordinary pinhole picture of equal-height posts on a level floor returns the identical horizon whichever eye drew it — the recovery is blind to where the eye stood, by construction, so “how far apart are the two stations” is not a question two genuine photographs can answer with anything but zero. What the routine can disagree with itself about is whether the marks came from an eye at all, and that is what a two-rule sheet actually tests.

Two rules, one sheet: the recovered horizons disagree by 7.80 pxTwo rows of equal-height posts on one canvas. The left row is drawn by an ordinary reciprocal law; the right by the same law blended 2.0% of the way toward its own tangent line at 8 m — a rule no camera in this collection's libraries produces. Fitting a horizon to each row separately, exactly as this site's own `horizonFromUprights` does for a photograph, returns two different rows: 7.80 px apart, at the picture's own two reference columns.rule A — ordinaryrule B — blendedmix = 0.0207.80 px
Fig. 1 Two rows of equal-height posts on one canvas. The left row is drawn by an ordinary reciprocal law; the right by the same law blended 2.0% of the way toward its own tangent line at 8 m — a rule no camera in this collection’s libraries produces. Fitting a horizon to each row separately returns two different rows, 7.80 px apart, at the picture’s own two reference columns.

What the station recovery actually asks

The routine this essay reuses, horizonFromUprights, does not fit a camera. It takes every pair of posts, draws the line through their two feet and the line through their two heads, and intersects them. For posts of one true height standing on one true level floor, photographed by any pinhole whatever, that intersection lands on the horizon — the image of the ground’s own direction at infinity — for every pair, regardless of how far apart the posts are or how far the eye that drew them stood back. The horizon is at eye level for exactly this reason: it is the image of a set of directions, not of a set of positions, and where parallel lines meet is a fact about the world’s own geometry rather than about the camera’s location in it.

The reason that intersection has to land on the horizon, rather than merely tending to, is worth spelling out because it is what makes the whole method exact rather than approximate. Two posts of the same real height standing on one level floor have feet that differ by some vector lying entirely in the ground plane, and heads that differ by the identical vector — the vertical offset that raises a foot to its head is the same constant for both posts, so it cancels out of the difference. A line through the two feet and a line through the two heads are therefore parallel in the world, which means their images share one vanishing point; and because the shared direction lies in the ground plane, that vanishing point is not merely a point somewhere in the picture, it sits on the ground plane’s own vanishing line — the horizon — whatever the camera’s height, focal length or position happen to be. Nothing about where the eye stood enters that argument at any step.

So handed several pairs of posts from a single reciprocal rule, every pair’s intersection is the same point, to floating-point precision, and fitting a line through a set of identical points is not really fitting anything — it is reading off a number that was already exact. Two stations recovered this way from two halves drawn by the same rule cannot disagree, because there is nothing in the computation that a station’s position could move.

What can move it is feeding the routine marks that were never drawn by a reciprocal rule at all. blendedFootOffset draws the right-hand row by a law blended some fraction — mix — of the way from the ordinary reciprocal curve toward that same curve’s tangent line at a reference depth of 8 m. At mix = 0 this is the reference rule itself; above it, the drawn height of a post no longer falls as one over its depth, so pairs of posts at different depths no longer intersect at one common point. They scatter, and horizonFromUprights fits a line through the scatter regardless — the routine has no way to ask whether its own assumption held, only to report the best answer available.

Why the blend is anchored where it is

blendedFootOffset does not simply average a reciprocal curve with an arbitrary straight one. It uses the reciprocal curve’s own tangent line at one reference depth, 8 m, so that the two rules agree in both value and slope exactly at that depth and pull apart to either side of it. That choice is what makes mix a genuine dial rather than a splice: there is no seam at 8 m for any value of mix, only a growing divergence at every other depth, which is why the disagreement measured below is a smooth, continuous function of mix rather than a discontinuous jump the moment the rule departs from reciprocal at all.

It also explains why this essay’s sweep stays close to mix = 0 — from 0 to 0.05 — rather than walking all the way to mix = 1. At mix = 1 the right-hand rule is exactly the tangent line itself: a purely linear law with no curvature and no horizon of its own, which is the far end of a different family entirely and belongs to the essay measuring a system with no diminution at all, referenced below. The interesting arithmetic for a two-rule sheet lives near the reciprocal end, where the picture still looks, to an untrained eye, like an ordinary photograph.

The two halves, and the number between them

At mix = 0.02 the figure above shows exactly that: the left row’s pairs still intersect at a single point, recovered to the arithmetic floor; the right row’s pairs scatter by enough that the fitted horizon sits 7.80 px away from the true one, measured at the two rows’ own reference columns. That gap is not a distance between two eyes. It is the distance between the true horizon and a fitted line built from marks that only mostly look like a photograph.

The number is worth taking literally rather than loosely. Both halves share one eye height, one focal length and one level orientation in the generator that drew them — nothing about where an eye stood differs between the two rows at all. The entire 7.80 px comes from the shape of the depth law on the right, and none of it from anything resembling a second station. Calling the gap a disagreement between stations would be describing an artefact of curve-fitting as though it were a fact about viewpoints, which is exactly the substitution the opening section exists to block.

The control, and why it is not small but zero

A measurement that has never had the chance to fail proves nothing, so the same construction has to be run with both halves drawn by the identical rule — the case in which, by the argument above, the two recovered horizons must coincide exactly.

The control: one rule on both sides recovers a gap of 6.7e-12 pxThe same two rows of posts, both drawn by the ordinary reciprocal law — mix = 0 on both sides. The two horizons fitted independently from the left row and the right row agree to 6.7e-12 px, which is the arithmetic floor rather than a small number: there is only one rule here, so there is only one station to recover, and the fit finds it twice.mix = 0 on both sidesgap 6.7e-12 px
Fig. 2 The same two rows of posts, both drawn by the ordinary reciprocal law — mix = 0 on both sides. The two horizons fitted independently from the left row and the right row agree to 6.7e-12 px, which is the arithmetic floor rather than a small number: there is only one rule here, so there is only one station to recover, and the fit finds it twice.

6.7e-12 px is not “very close.” It is what floating-point arithmetic returns when a computation that should be exact is asked to demonstrate its own exactness, and it is the number this essay’s whole argument stands or falls on. If the two recovered horizons had disagreed by a measurable amount even here — with both rows drawn by one rule, from one eye height, one focal length — the conclusion above would be wrong, and the 7.80 px measured at mix = 0.02 would need a different explanation. It does not disagree, so the gap above is attributable entirely to the one thing that differs between the two rows: the shape of the law drawing them, not any station either row implies.

Growing the mix: from a fraction of a pixel to sixteen

Between the control’s exact zero and mix = 0.02’s 7.80 px there is a family, and it is worth reading at more than one point because the shape of the growth is itself informative.

Two rules, one sheet: the recovered horizons disagree by 1.91 pxTwo rows of equal-height posts on one canvas. The left row is drawn by an ordinary reciprocal law; the right by the same law blended 0.5% of the way toward its own tangent line at 8 m — a rule no camera in this collection's libraries produces. Fitting a horizon to each row separately, exactly as this site's own `horizonFromUprights` does for a photograph, returns two different rows: 1.91 px apart, at the picture's own two reference columns.rule A — ordinaryrule B — blendedmix = 0.0051.91 px
Fig. 3 The same construction at a fifth of the earlier drift. Rule B has moved 0.5% of the way toward its own tangent line at 8 m, and the two recovered horizons already disagree by 1.91 px — not zero, at a mix four times smaller than the one shown first.

At mix = 0.005 the gap is 1.91 px; at mix = 0.02 it is 7.80 px; at mix = 0.04, twice that mix again, it is 16.05 px. None of the three ratios of gap to mix are quite equal — 382, 390 and 401 pixels per unit of mix, rising slowly rather than holding constant — so the growth is close to proportional without being exactly linear, which is what a blend between two different curves should produce: near mix = 0 the two rules agree to first order and the departure grows almost linearly, and the small upward drift in the ratio is the second-order term making itself felt.

Two rules, one sheet: the recovered horizons disagree by 16.05 pxTwo rows of equal-height posts on one canvas. The left row is drawn by an ordinary reciprocal law; the right by the same law blended 4.0% of the way toward its own tangent line at 8 m — a rule no camera in this collection's libraries produces. Fitting a horizon to each row separately, exactly as this site's own `horizonFromUprights` does for a photograph, returns two different rows: 16.05 px apart, at the picture's own two reference columns.rule A — ordinaryrule B — blendedmix = 0.04016.05 px
Fig. 4 The construction at twice the mix of the lead figure. The rule on the right has moved 4.0% of the way toward the tangent line, and the recovered horizons are 16.05 px apart — close to double the gap the previous paragraph reports at half this mix, which is the near-linear growth stated above holding up at the far end of the range this essay uses.

That near-linearity matters for what comes next, because it means the crossing of any given visibility floor can be predicted from these three numbers alone, and checked against a direct search rather than trusted on the strength of an extrapolation.

Where the seam becomes visible

The three measured points already suggest an answer near 386 px of gap per unit of mix — the middle of the three ratios above — which would put a 0.5 px gap at a mix of about 0.0013. That is exactly what a direct search for the crossing finds.

The seam becomes visible at mix = 0.0013The disagreement between the two recovered horizons, swept over how far the second half's rule has drifted from the first's. It rises from the arithmetic floor at mix = 0 and crosses 0.5 px — the displacement this site's own figures are built not to let fall below, on a hairline stroke — at mix = 0.0013. That is a tiny fraction of the way from one rule to the other: a picture does not have to become two-eyed in any roomy sense to show a seam a reader could see.0510152000.0100.0200.0300.0400.050how far rule B has drifted (mix)recovered-horizon disagreement, px0.5 px at mix 0.0013recovered-horizon gap against mixcrosses 0.5 px early
Fig. 5 The disagreement between the two recovered horizons, swept over how far the second half’s rule has drifted from the first’s. It rises from the arithmetic floor at mix = 0 and crosses 0.5 px — the displacement this site’s own figures are built not to let fall below, on a hairline stroke — at mix = 0.0013. That is a tiny fraction of the way from one rule to the other: a picture does not have to become two-eyed in any roomy sense to show a seam a reader could see.

0.5 px is this site’s own stated floor for what a hairline stroke can show at all, reused rather than invented for this essay, and the crossing sits at mix = 0.0013 — a rule blended little more than a tenth of one percent of the way toward the linear law. The agreement between that number and the rough estimate from three sampled points is itself worth noting: the gap really does grow close to linearly across this whole range, so a reader with the three numbers in the previous section and a ruler could have located the crossing to within a few percent without running anything.

The finding this figure carries is not that a two-rule picture eventually shows a seam. It is that the amount of two-ruledness needed is startlingly small — a picture would have to be inspected at the level of a fraction of a pixel to notice that anything at all was wrong with the sheet above, and at mix = 0.0013 the departure from an ordinary reciprocal law is not something a hand drawing that rule instead of the true one would be likely to avoid by accident, only by care.

A translating eye has no such answer at all

It is worth setting this essay’s two recovered horizons — two genuine, finite, merely disagreeing answers — against a picture that has no answer whatever, because the contrast sharpens what “disagreement” means here.

Curving straight lines and having no centre are two different thingsThe rms miss of the best single centre, for two cameras that both draw straight world lines as curves. A rotating eye keeps its centre exactly — 2e-15 m, which is the solver's noise floor. A translating eye has none: 7.97 m over 27 m of track. A panorama is a projection and a scroll is not, and no amount of looking at the curves tells them apart.a rotating eye — the panorama2e-15 ma projectiona translating eye — the scroll7.97 mnot oneboth of these draw a straight world line as a curverms miss of the least-squares centreone of them is a projection
Fig. 6 The rms miss of the best single centre, for two cameras that both draw straight world lines as curves, from the essay that measured a scroll’s own missing centre. A rotating eye keeps its centre exactly — 2e-15 m, the solver’s noise floor. A translating eye has none: 7.97 m over 27 m of track.

A translating eye is not a station that has moved a little; it is a picture with no single station to find, at any tolerance, because no one point explains marks drawn from a continuum of positions. The routine that fits a centre to it is not being fed a slightly wrong answer — it is being asked a question with no answer, and 7.97 m is the size of the miss when it is forced to give one anyway.

Nothing here is that. Both halves of the two-rule sheet, at every mix this essay uses, return a perfectly good horizon — a real intersection of real lines, computed the same way whichever half it comes from. The disagreement between them is a disagreement between two well-posed answers, not the absence of one, and that is the more surprising shape of the two: a picture can be wrong about where its own horizon is without ever failing to produce one.

The honest limit

What this essay measures is the sensitivity of one recovery routine to one specific violation of its own assumption, and it is worth being exact about what that does and does not license.

It does not show that two real eyes, however placed, can disagree about a horizon by 7.80 px or any other amount — the opening section’s algebraic fact rules that out categorically, for any two pinhole cameras sharing an orientation and a level floor. It does not measure a distance between stations, because there is only ever one station recoverable from genuine pinhole marks, however many there notionally were. And it says nothing about how a reader would notice a two-rule sheet by eye rather than by fitting a line through it — the 0.5 px floor above is a statement about what a stroke can render, not about what a viewer would spot without measuring.

What it does show, cleanly, is that a recovery tool built on an assumption can be made to report an answer even when the assumption is false, and that the size of the wrong answer is a genuine, monotone, near-linear function of how false the assumption is. That is a fact about instruments rather than about eyes, and it is the fact the corrected version of this essay is actually about.

It is also worth being clear about what “false” means here, because it is a narrower failure than the one the cube that is a box measures on a different construction. There, a hand-drawn cube’s corner angles are consistent with an enormous family of solids and prove nothing about which one was intended — the picture is a perfectly good projection, of more than one thing. Here, one whole half of the picture is not a projection of anything at all once mix moves off zero, because no camera in this collection’s libraries draws a linear depth law. The recovery routine cannot tell the two failures apart — it returns a number either way — which is precisely why the number it returns has to be checked against what produced the marks rather than trusted on its own.

What this is an instance of

Counting the eyes needs the room measured the opposite case: a picture genuinely drawn from two centres, where fitting a single one is told either the room’s own true measurements or an assumed set, and the fit’s residual reports which telling is correct — a real disagreement, because a real second eye was involved. A picture with two eyes in it and the second eye is a shear both build that second eye deliberately and price what absorbing it costs. This essay’s sheet has no second eye anywhere in it — one eye height, one focal length, one level orientation, throughout — and still produces a measurable, growing disagreement, because the thing that varies is not a viewpoint but a law.

That is the same distinction a picture with no size–distance signal draws from the far end of the same family: at mix = 1 the blended rule becomes exactly the linear, no-diminution law that essay measures, and a system with no diminution has no horizon to recover at all, by the same reasoning that gives this essay’s mix = 0 case its horizon for free. Between those two ends sits a family of rules no eye produces, and recovering the camera from a picture only works when the picture came from one — the whole content of a rule-mix sweep is what a recovery tool does in the space between “came from a camera” and “did not,” which is a space every recovery routine on this site is implicitly assuming it never has to visit.

Size that means rank sits on the same family from a third angle, worth naming because it inverts the direction of the error. There the drawn size of a figure is deliberately decoupled from distance, to record importance instead, and the resulting picture is caught by carrying a height across the room with the taught construction and watching it land in the wrong place — a test built on the ordinary reciprocal rule, applied to marks that quietly disobey it. This essay’s blended rule disobeys the same law in a gentler, continuous way and is caught by a different instrument — a horizon fit rather than a carried height — but the shape of the finding is identical: a drawing convention that changes how depth is recorded is detectable by the specific tool built to trust the convention it is not using, and the size of the detection is a number rather than an impression.

The transferable form is short. A station-recovery routine tests whether marks are consistent with a station, not where one stood, so a family of pictures that vary a rule rather than a viewpoint is the only way to make such a routine disagree with itself — and the disagreement it produces, once it exists, is a measurement of the rule’s own departure from anything a camera could have drawn, stated in the currency the routine understands, which is pixels rather than metres.

What links here

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

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.

DiminutionDrawing conventionFree parameterHorizonPicture planeStation-disagreementStation pointTotal least-squaresVanishing point