DSA · Computational Geometry · Open Problem

Paper Cuts

A deceptively simple problem about cutting a page into pieces — that opens into surprisingly deep design questions.

It started with a movie scene.

You know that trope — someone feeds a stack of documents into a shredder. Long strips of paper rain down. Then, in the next scene, a forensics team (or some obsessive CS guy) reconstructs the original pages from those strips.

The CS version of that is actually a real problem: given a set of rectangular strips with known widths and edge features, reconstruct the original document. People have built solvers for it. It's basically a constrained jigsaw puzzle with a known shape vocabulary.

But I started wondering about a different direction. Not reconstruction, but decomposition. What if instead of strips, we had arbitrary straight cuts? And instead of asking "reassemble this," we asked more fundamental questions first — about how you even represent the problem?

This is what I'm calling Paper Cuts.

Let's start concrete. A square page.

Take a unit square — the page is [0,1] × [0,1]. Now make some straight cuts. Each cut goes all the way across (for now). Here's what we're dealing with:

page ① blank page
A B y=0.5 ② one cut → 2 pieces
R₁ R₂ R₃ R₄ ③ two cuts → 4 pieces
R₁ R₂ ④ diagonal cut → 2 pieces
now things get interesting — 3 cuts in general position
R₁ R₂ R₃ R₄ R₅ R₆ R₇ 7 regions · 3 intersection nodes

3 cuts in general position (no two parallel, no three concurrent) on a bounded rectangle produce 7 regions.

Each new cut that crosses k existing cuts adds exactly k+1 new regions. So: 1 cut → 2, 2 cuts (crossing) → 4, 3 cuts (each crossing both others) → 4+3 = 7.

The formula for n cuts in general position is 1 + n + n(n–1)/2. For n=3 that's 7. Notice R₅ — the tiny central triangle — only exists because all three cuts meet in a cluster, not a single point.

fig. 1 — increasing cut complexity on a unit square. cuts shown as colored lines; intersection nodes as hollow circles.

Okay, so what's the actual problem?

Here's a rough first-pass formulation. Treat it as a sketch, not a spec — the interesting part is all the design questions hiding inside it.

// Paper Cuts — Problem Statement v0.1

Input:
  page   → a rectangle (e.g. unit square [0,1]×[0,1])
  cuts   → a set of line segments, each defined by
           two points on the boundary of the page

Output:
  a set of regions (polygons) such that:
    • every point on the page belongs to exactly one region
    • no region is split by any cut
    • the union of all regions = the original page

Constraints:
  ??? ← this is where it gets interesting

Those ??? are doing a lot of work. Let's unpack them.

The design questions.

Before you think about the algorithm, you have to answer a bunch of representational questions. I've been sitting with these for a while and they're genuinely non-trivial:

1 · Input Representation

2 · Duplicates and Degeneracies

3 · Output Representation

4 · Rotations and Equivalence

One way to think about it: a planar graph

Here's the framing I keep coming back to. Every valid set of cuts induces a planar straight-line graph on the page:

intersection? two cuts + boundary
v₃ v₁ v₂ v₄ v₅ PSLG — nodes are endpoints + intersections
F₁ F₂ F₃ F₄ faces of the graph = cut regions

fig. 2 — cuts induce a PSLG; its faces (bounded regions) are the cut pieces. v₃ is the intersection node.

Every cut endpoint on the boundary is a graph node. Every intersection of two cuts is also a graph node. The cuts themselves become edges. The faces of the resulting planar graph — everything except the outer infinite face — are exactly the pieces you get when you scatter the cuts.

Key insight so far: representing cuts as a planar straight-line graph (PSLG) lets you use existing planar subdivision algorithms to enumerate the regions. The cut points become the graph's vertices; the segments between them are its edges.

Some cases worth thinking about

R₁ R₂ R₃ R₄ R₅ R₆ 3 cuts, 1 common point ⟶ 6 regions. degree-6 vertex.
R₁ R₂ R₃ T-junction cut ⟶ 3 regions. only top half splits.
R₁ R₂ R₃ 2 parallel cuts ⟶ 3 regions. no intersection node.

fig. 3 — edge cases worth handling: high-degree vertices, T-junctions, parallel cuts.

The T-junction case is particularly sneaky. The half-cut goes from the boundary to another cut — it doesn't exit through the other side. This does still divide regions: the top half gets split into two, but the bottom half is untouched, giving 3 regions total (not 2). Now the question for your algorithm is whether a T-junction endpoint is treated differently from a full intersection node — in PSLG terms, v has degree 3 instead of 4, which changes the face-walking logic.

What I've figured out so far

Running notes — updated as I go

Cut endpoints on the boundary of the page can be treated as nodes in a graph. So can any interior intersection of two cuts. Everything between two consecutive nodes on the same cut becomes a graph edge.

The faces of this planar graph (the PSLG) correspond directly to the cut pieces. So enumerating pieces = traversing faces = the classic face-finding problem on a planar graph.

A DCEL (Doubly Connected Edge List) is a natural data structure for this — each edge has a twin, prev, and next pointer. Faces can be walked in O(edges) time. But building a DCEL correctly from raw line segments involves a sweep-line step to find all intersections first.

The number of regions after n full cuts on a bounded rectangle follows a recurrence, but it's not just "add one per cut" — depends on how many existing cuts each new cut crosses.

PSLG as the underlying structure Intersections → interior nodes Faces = regions DCEL for adjacency Sweep line for intersections

The harder variant: re-assembly

Once you can go from cuts → regions, you can flip it. Given an unlabeled set of polygonal pieces (no coordinates, just shapes), can you determine if they came from a single rectangular page? And if so, how many cuts were made, and where?

This is the shredder problem — and it's substantially harder. You'd need to:

  1. Define a canonical representation for each piece that's invariant to translation (and maybe rotation).
  2. Find edge matchings — two pieces are adjacent if they share an edge of equal length.
  3. Verify that the assembled configuration tiles into a valid rectangle.
  4. Decide whether reflected/rotated pieces count as "the same."
Open question: is there always a unique reconstruction? Or can two different cut sets produce identical multisets of pieces? What's the smallest example where reconstruction is ambiguous?
tags
#DSA #ComputationalGeometry #PSLG #DCEL #PlanarGraphs #TryItYourself #ThinkingOutLoud

I'm still thinking about this. No solution here — that's the point. If you have thoughts on the representation questions, a counterexample, or just want to argue about whether T-junction cuts should be allowed — I'm all ears. Will post updates as I figure things out.

Replies, quote-posts, DMs all welcome — @omkar_builds. Let's think about this together.