Reading and display settings

Appearance

System follows your operating system and keeps following it, even if you change it later. The header's sun, moon and monitor cycle the same three options.

Text size (%) 100%

Default. Scales every text size on the site, equations and tables included.

Reading width 70ch

How much text runs across one line of prose. Narrower is easier to track; wider fits more on screen.

Line spacing 1.6

The leading on body text. Taller leading helps a tired eye stay on the line.

Density

Padding and gaps around controls, cards, and tables — how much breathing room the layout leaves itself.

Motion

System follows your operating system. Reduced removes every transition on this site. Full keeps them on unless your system asks for less.

0

Not all transformations are equally destructive

Motivation

Every step of a 3D reconstruction pipeline applies a map to points. Rotating the world into a camera frame is one map; scaling metres to millimetres is another; projecting 3D points onto an image plane is a third; and estimating a homography between two views of a plane is a fourth. What differs drastically between them is how much of the geometry they destroy. A rotation is harmless — distances and angles come out exactly as they went in. A general homography is brutal — it can turn a square into an arbitrary convex quadrilateral.

This matters because the maps are nested. The rigid motions sit inside the similarities, which sit inside the affine maps, which sit inside the projective maps. If you know which group a map belongs to, you know immediately what it preserved and what it destroyed — lengths? angles? parallelism? ratios along a line? That kind of bookkeeping is what makes it possible to upgrade a reconstruction: start from a purely projective reconstruction (nothing known but incidence), and add constraints until you have recovered affine structure (the plane at infinity) and then metric structure (the absolute conic). The hierarchy is the roadmap for that upgrade, and it is the subject of this page.

1

The four groups and their invariants

The stratification

On P², the four groups form a nested chain, each one adding a degree or two of freedom and giving up an invariant in exchange:

Euclidean  ⊂  similarity  ⊂  affine  ⊂  projective

In normal form, with a 2D point written homogeneously as (x, y, 1), each group is a 3×3 matrix of a specific shape:

Euclidean:   [[R, t], [0, 1]]    R rotation (2×2), t translation (2×1)
similarity:  [[sR, t], [0, 1]]    s a single nonzero uniform scale
affine:      [[A, t], [0, 1]]    A any invertible 2×2 (adds shear / anisotropic scale)
projective:  [[A, t], [v₁, v₂, v₃]]    any invertible 3×3, last row arbitrary

Read the degrees of freedom off the matrix entries and then subtract the overall scale of a homogeneous matrix, which is meaningless:

Euclidean:   R (1 angle) + t (2)  =  3 DOF
similarity:  Euclidean (3) + scale s (1)  =  4 DOF
affine:      A (4) + t (2)  =  6 DOF
projective:  9 entries − 1 overall scale  =  8 DOF

Each extra freedom is a quantity that is no longer preserved. Euclidean maps keep lengths and angles. Similarity adds a uniform scale, so lengths change but ratios of lengths along a line and all angles are safe. Affine adds shear and per-axis scaling: now angles and length ratios along a line die, but parallelism, ratios along a line, ratios of areas, midpoints, and convexity all survive. Projective keeps only incidence, collinearity, concurrency, tangency, and cross-ratio.

The geometric way to see the same stratification is through what each group does to the line at infinity l∞ = (0, 0, 1):

affine:     maps l∞ to itself (parallel lines stay parallel)
similarity: fixes the two circular points on l∞
Euclidean:  additionally fixes the metric structure Ω∞ (no shear, no scale)
💡 Bridge to the rest of the series: homography estimation — Part 8, and the workhorse of panorama stitching and plane rectification — recovers a general projective element of the largest group here. It knows nothing about l∞ or the circular points; recovering those is a separate, later step.
2

Cross-ratio: the projective invariant

The one thing that survives

Take four collinear points A, B, C, D on a line, and measure their directed distances along that line. The cross-ratio is the ratio of the ratio of those distances:

(A, B; C, D) = (AC / BC) / (AD / BD)

where AC means the directed distance from A to C along the line. This is the one metric-flavored quantity that any projective map leaves untouched. To see why, parametrize the line so that the four points sit at parameters a, b, c, d; then AC is just c − a, and a projective map of the line — the most general invertible map that keeps incidence — is a fractional-linear substitution:

t  ↦  (αt + β) / (γt + δ)    with  αδ − βγ ≠ 0

Apply it to two of the parameters and simplify. The difference of two images is:

f(c) − f(a) = (αδ − βγ)(c − a) / [(γc + δ)(γa + δ)]

and similarly for every other pair. Assembling the cross-ratio, each of the four differences contributes the common factor (αδ − βγ) — which cancels between numerator and denominator — and the remaining denominator factors cancel pairwise:

(f(a), f(b); f(c), f(d))
  = [ (f(c)−f(a)) / (f(c)−f(b)) ] / [ (f(d)−f(a)) / (f(d)−f(b)) ]
  = [ (c−a)/(c−b) ] / [ (d−a)/(d−b) ]  =  (a, b; c, d)

The point is that the arbitrary constants α, β, γ, δ fell out entirely: the cross-ratio depends only on the four points, never on the map. An affine map is the special case γ = 0, so it preserves plain ratios along the line as well — a projective map does not, and cross-ratio is exactly the extra structure that rescues the notion. A particularly important value is the harmonic case (A, B; C, D) = −1, where C and D divide the segment AB internally and externally in the same ratio; it is the invariant that isolates conjugates. And on the line at infinity, the cross-ratio of the two circular points with any other pair is what ties projective geometry back to Euclidean angle measure.

🎯 Learning goal (cross-ratio): a projective map can shrink, stretch, and relocate four collinear points arbitrarily — but the cross-ratio (A,B;C,D) comes out identical on both lines. Drag any point and watch both values track each other exactly.

Top: four draggable collinear points. Bottom: the same four points after the projective remap t′ = 6t/(t+4). Labels travel with the points.

Directed distances along each line; (A,B;C,D) = (AC/BC)/(AD/BD). Under an affine remap ratios along the line would also survive — under this genuinely projective remap they don’t, but the cross-ratio still does.

3

Play: classify a transform by which invariants survive

Interactive

🎯 Learning goal (transformation hierarchy): drag the corners of the dashed unit square into any convex quadrilateral. The demo checks the shape’s properties and reports the least destructive transform group that can produce it — with the DOF each group has.

Drag the four orange handles. Classification: square/rotated square = Euclidean (3 DOF), uniformly scaled = similarity (4), parallelogram = affine (6), anything else = projective (8).

✓

Cheat sheet

Recap

GroupDOFPreservesDestroysWhere it appears
Euclidean3Lengths, angles, parallelism, ratios, area ratios, cross-ratioNothing metric (only position)Rigid camera motion, change of coordinate frame
Similarity4Angles, parallelism, ratios along a line, area ratios, cross-ratioAbsolute lengths (uniform scale)Unit conversion, scale-ambiguous reconstruction
Affine6Parallelism, ratios along a line, area ratios, midpoints, convexity, cross-ratioLengths, angles (shear, anisotropic scale)Fronto-parallel view of a plane, affine reconstruction
Projective8Incidence, collinearity, concurrency, tangency, cross-ratioParallelism, ratios along a line, lengths, anglesGeneral homography (plane-to-plane), projective reconstruction
The hierarchy lives on the plane for now, but cameras project from 3D and lines in space are not simply points at infinity. The next page lifts all of this one dimension up — 3D projective space and the Plücker coordinates of a line. Continue: 3D projective space & Plücker lines →