Using iterated suspensions to get nice coordinates on configuration space
Second in a series on spherical configuration spaces of planar linkages, joint work with Aaron Abrams, Dave Bachmann, and Edmund Harriss. The setup is in the first post.
In the previous post we showed that the configuration space MLn of an n-rod planar chain pinned at both ends — the locus in Tn where the rod angles satisfy the closure equation ∑keiθk=L — is homeomorphic to the (n−2)-sphere whenever n−2<L<n. The argument was inductive: peeling off the last rod identifies MLn as a topological suspension of Mdn−1 at an appropriate sub-base length d, so iterating from the base case ML2=S0 gives a tower of n−2 suspensions, Σn−2S0=Sn−2.
What that proof established was the homeomorphism type. What it didn’t give us, at least not directly, was the explicit homeomorphism — a map you could plug into a computer and calculate with. In this post we’ll write one down:
ΨLn:Sn−2⟶MLn,
an explicit homeomorphism, for each n≥2 and every L in the allowable range.
We work up by example. After the trivial base case n=2 — just two configurations of the elbow-up/elbow-down kind — we build ΨL3 from ΨL2 explicitly, by hand. The first nontrivial step is where the geometric and analytic moves of the construction show themselves most clearly: rescaling, smoothing across the suspension poles, the whole story. Once we see the pattern, we articulate the general “add one rod, get one suspension” recipe. Then we apply that recipe to get ΨL4 as a parameterization of ML4≅S2, and gesture at the iteration to higher dimensions.
Each section will follow the same template: build the parameterization in rod angles first — the natural coordinates inherited from the suspension construction — then convert to position coordinates, the locations of the chain’s interior hinges. The position-space form is consistently cleaner: the inverse trig functions that clutter the rod-angle formula collapse into elementary expressions, and smoothness across the suspension poles becomes transparent.
Angle coordinates and position coordinates
There are two natural sets of coordinates for an n-rod planar chain pinned at 0 and L:
Angle coordinates(θ1,…,θn)∈Tn, the rod angles, with MLn cut out by closure ∑keiθk=L.
Position coordinates(p1,…,pn−1)∈Cn−1, the locations of the interior hinges, with pk=∑j≤keiθj. The pinned endpoint pn=L is fixed, so can be left off.
The two are related by the cumulative sum: pk=pk−1+eiθk (taking p0:=0), and going back, eiθk=pk−pk−1 — the unit vector from one hinge to the next.
In position coordinates the closure equation has already been folded in: the last position pn=L is fixed by the pinning, so it doesn’t appear among the coordinates at all.
In angle coordinates closure can be used to drop one coordinate too. The first n−1 angles determine the position of pn−1, and for the chain to close, the last rod must be the unique unit segment from pn−1 to L — so θn=arg(L−pn−1) is determined by the others. Dropping it gives an embedding MLn↪Tn−1 (as mentioned in post 1) that we’ll exploit for visualizations.
ML2≅S0
For the base case, we’ll think of S0 as the discrete two-point set parameterized by a sign variable
σ∈{+1,−1}.
The two configurations are the elbow-up and elbow-down isoceles triangles with vertices (0,0), p1, (L,0), with the equal sides of length 1.
Angle coordinates
The triangle’s two equal base angles are both the elbow half-angle
β(L):=arccos(L/2),
so rod 1 makes angle σβ(L) with the positive x-axis and rod 2 makes the opposite angle:
ΨL2(σ)=(σβ(L),−σβ(L)).
Closure check.eiσβ+e−iσβ=2cosβ(L)=L ✓ (using cosβ(L)=L/2 by definition).
Position coordinates
The single interior hinge sits on the unit circle at angle σβ. Since cosβ=L/2 and sinβ=4−L2/2,
ΨL2:σ⟼p1=21(L+iσ4−L2),σ∈{+1,−1}.
ML3≅S1
We build ΨL3:S1→ML3 by hand from the base case Ψd2. The strategy comes straight from the suspension proof of last post: project a ML3 configuration onto its last rod’s angle, parameterize the fiber over that angle as a sub-config in Md2, and place the result in the right ambient frame.
Angle coordinates
The suspension structure
Fix a target value θ for the third rod’s angle. With this last rod placed, the second-to-last vertex sits at p2=L−eiθ. The first two rods then span from the origin to p2 — a M2-style chain at sub-base length
d:=∣L−eiθ∣=L2−2Lcosθ+1.
For this sub-chain to exist we need d≤2, which restricts θ to an arc
θ∈[−α,α],α:=arccos2LL2−3.
For each interior θ, the sub-chain in its own reference frame — base laid along the positive x-axis from (0,0) to (d,0) — is a configuration of Md2, parameterized by the sheet sign σ∈{±1} from before:
Ψd2(σ)=(σβ(d),−σβ(d)),β(d):=arccos(d/2).
To place the sub-chain in the ambient frame (where it should run from the origin to p2=L−eiθ rather than to (d,0)), we rotate by
R:=arg(L−eiθ).
Both frames share the origin, so this is a pure rotation — no translation needed. (This is the geometric payoff of projecting onto the last rod rather than the first.) Rotating each rod-vector by R adds R to its angle, so the rotated sub-config has rod-angles (R+σβ,R−σβ).
Stacking all three rods, the parameterization sending (θ,σ) to a configuration in ML3 is
(θ,σ)⟼(R+σβ(d),R−σβ(d),θ),
with d,R,β defined above.
Closure check.ei(R+σβ)+ei(R−σβ)=eiR(eiσβ+e−iσβ)=2cosβeiR=deiR, using cosβ=d/2. And deiR=L−eiθ by definition of R. So the rod-vectors sum to (L−eiθ)+eiθ=L. ✓
Suspension coordinates
The natural domain for our parameterization is the suspension itself — ΣS0=[−1,1]×S0, with the four endpoints (±1,±1) glued in pairs at the two suspension poles s=±1. This is the same domain regardless of L. We want a map ΨL3:ΣS0→ML3 on this fixed domain.
The second factor lines up for free: σ already lives in S0. The first factor needs a rescaling — currently θ runs over the L-dependent arc [−α,α], but we want it to come from [−1,1]. The simplest choice does it:
s∈[−1,1],θ=αs.
Pulling our parameterization back through this rescaling defines
ΨL3ΨL3(s,σ):ΣS0→ML3,=(R+σβ(d),R−σβ(d),αs),
with θ=αs, d=L2−2Lcosθ+1, R=arg(L−eiθ), β=arccos(d/2).
This is a perfectly good homeomorphism from ΣS0 to ML3. But the domain isn’t a smooth circle: the sheet sign σ is a discrete variable, not a smooth coordinate. To get a smooth map from S1 we have to repackage (s,σ) in terms of a single circular variable.
Smoothing the parameterization
Introduce a circular variable t∈[−π,π) — the angle on S1={eit} — and parameterize the suspension coordinates by
s(t):=sint,σ(t):=sgn(cost).
As t runs from −π to π:
t=−π/2: s=−1, the south suspension pole — fiber has collapsed.
t∈(−π/2,π/2): σ=+1, s sweeps from −1 up through 0 (equator) to +1 on the upper sheet.
t=π/2: s=+1, the north suspension pole.
t∈(π/2,π) and t∈(−π,−π/2): σ=−1, s sweeps from +1 back down through 0 to −1 on the lower sheet.
So t traces the upper sheet from south pole to north pole, then the lower sheet back, completing the full circle. Composing with the suspension formula gives θ(t)=αsint and a single-variable map ΨL3:S1→ML3,
By closure, θ3=θ(t) is determined by the first two rod angles, so we can drop it and equivalently view ML3 as a closed curve in the 2-torus. This lower-dimensional embedding is easier to picture than the full curve in T3 — and the savings will matter even more for the next case (ML4 as a sphere in T3 rather than T4).
Position coordinates
To convert the rod-angle formula into hinge positions, sum cumulatively: p1=eiθ1, p2=eiθ1+eiθ2. The simplifications happen because of two complex-exponential identities — exponentials eat inverse trig functions:
eiarg(z)=z/∣z∣: the exponential of an arg is just a normalization.
eiσβ=cosβ+iσsinβ=21(d+iσ4−d2), using cosβ=d/2 and sinβ=4−d2/2.
In the rod-angle picture these inverse trig wrappers stay; in the position-space picture they collapse.
p2. Sum the two halves:
p2=eiθ1+eiθ2=eiR(eiσβ+e−iσβ)=2cosβ⋅eiR=deiR.
Then eiR=(L−eiθ)/d kills the d:
p2=L−eiθ.
Geometric reading: p2 is the right endpoint L minus the third rod’s vector eiθ — the chain, end backwards.
p1. From p1=eiReiσβ, multiply the two simplified factors:
Geometric reading: p1 is the midpoint of 0p2 plus a perpendicular offset — the elbow of two unit rods spanning a base of length ∣p2∣=d. The factor ip2/∣p2∣ is the unit vector perpendicular to p2, the offset magnitude is 4−∣p2∣2/2, and σ picks the sheet.
Smoothness, transparently
In rod-angle coordinates, smoothness across t=±π/2 would require chasing the sign jump of σ through the cusp of β and verifying that they cancel. In position coordinates, every step above is elementary except for σ4−∣p2∣2, and that combines into a single smooth signed amplitude. Define
using 4−∣p2∣2=2L(cosθ−cosα) (from the law of cosines and cosα=(L2−3)/(2L)). The ratio under the radical extends by continuity to its limit at cost=0: a Taylor expansion at t=π/2 gives 4−∣p2∣2∼Lαsinαcos2t, so the ratio extends smoothly to Lαsinα>0. Outside the poles ν(t)=σ(t)4−∣p2(t)∣2, by direct computation: cost⋅X/cos2t=sgn(cost)X for X>0. So ν is smooth everywhere on R, and its zeros at t=±π/2 are linear crossings — exactly what we’d expect for the signed altitude of a triangle whose elbow passes through the base.
The same expression can be rewritten without any apparent singularity at all. Applying the product-to-sum identity to cosθ−cosα and a half-angle substitution gives
function psi3Position(t, L) { const alpha = Math.acos((L*L - 3) / (2*L)); const theta = alpha * Math.sin(t); const c = Math.cos(t); // p = L - e^{i theta} const p_re = L - Math.cos(theta); const p_im = - Math.sin(theta); const p_abs = Math.hypot(p_re, p_im); // nu(t): smooth signed amplitude. Numerator and denominator both vanish // quadratically at cos t = 0; the ratio extends to L*alpha*sin(alpha). const num = 2 * L * (Math.cos(theta) - (L*L - 3) / (2*L)); const nu = Math.abs(c) < 1e-6 ? Math.sign(c || 1) * Math.sqrt(L * alpha * Math.sin(alpha)) : c * Math.sqrt(num / (c * c)); // p1 = p/2 + (i nu / (2|p|)) * p const k = nu / (2 * p_abs); return { p1: [p_re / 2 - k * p_im, p_im / 2 + k * p_re], p2: [p_re, p_im], };}
Click on the circle to drag the configuration around yourself!
The general step
What we just did for ΨL3 generalizes. The geometric structure of the construction — project on the last rod’s angle, fix the sub-base length and orientation, parameterize the fiber by the inner config space — is the same at every level of the iteration. Let’s articulate it as a recipe.
Angle coordinates
Suppose, inductively, that we have a smooth parameterization
Ψdn:Sn−2⟶Mdn
in angle coordinates, for every d in the corresponding allowable range n−2<d<n. We want to build ΨLn+1:Sn−1→MLn+1 from Ψn.
Coordinate the parameterizing sphere Sn−1 by a latitudeϕ∈[−π/2,π/2] and a fiber point p∈Sn−2 (the inner spherical coordinates), with the fiber collapsing at the two poles ϕ=±π/2. We’ll bake the smooth sin-rescaling directly into the recipe — exactly analogous to what we did for ΨL3 — so that the suspension axis is from the start an angle, going pole-to-pole through the equator.
The same three helper functions show up. The half-width of the admissible arc for the last rod, when the sub-chain has n rods that need to span up to distance n, is
α(n,L):=arccos2LL2−n2+1.
The sub-base length and sub-frame rotation as functions of the last-rod angle θ are
d(L,θ):=L2−2Lcosθ+1,R(L,θ):=arg(L−eiθ).
Set θ=αsinϕ as we did for the circle: the standard latitude rescaling that takes the equator ϕ=0 to θ=0 and the poles ϕ=±π/2 to θ=±α. Then for each (ϕ,p)∈Sn−1, the recipe gives
ΨLn+1(ϕ,p)=(R+Ψdn(p),αsinϕ),
where α=α(n,L), θ=αsinϕ, d=d(L,θ), R=R(L,θ), and R+(θ1,…,θn):=(R+θ1,…,R+θn) is componentwise scalar addition.
Position coordinates
Suppose inductively that we have Ψdn in position coordinates: Ψdn(p) outputs a tuple of n−1 interior hinges in C for a chain pinned at 0 and d on the real axis (its “sub-frame”).
Coordinate Sn−1 the same way as before, with the same θ=αsinϕ. The outermost interior hinge of the new chain is determined by θ alone — closure forces the last rod to be eiθ, so
pn=L−eiθ,
the same “endpoint minus last rod” identity that gave us p2 in the circle case, now at the outer level. Its modulus ∣pn∣ is the sub-base length d, and its direction p^n:=pn/d is the rotation that places the sub-frame in the ambient one.
The first n−1 interior hinges come from the inner sub-chain. Ψdn(p) produces them in the sub-frame; componentwise multiplication by p^n rotates them into the ambient frame. So:
ΨLn+1(ϕ,p)=(p^n⋅Ψdn(p),pn),
with pn=L−eiθ and p^n⋅(z1,…,zn−1):=(p^nz1,…,p^nzn−1) being componentwise complex multiplication.
Geometric reading: append one new outer hinge, rotate the rest into place. The whole step is a complex subtraction and a complex multiplication — no inverse trig at the recursion level. (p^n is the same rotation that the angle picture writes as eiR, just packaged as a unit complex number rather than a scalar angle.)
ML4≅S2
We’re now ready to apply the general step with n=3 to build the parameterization of the 2-sphere. Coordinate S2 by latitude ϕ∈[−π/2,π/2] and longitude t∈S1 — in the recipe’s notation, ϕ is the suspension parameter and t is the inner fiber point, which we feed directly into Ψd3 from §3. As with standard spherical coordinates, this chart has the usual singularities at the poles ϕ=±π/2, where the longitude t becomes meaningless.
Angle coordinates
The angle-version recipe gives
ΨL4(ϕ,t)=(R+Ψd3(t),αsinϕ),
where the outer-level helpers are functions of ϕ alone and the inner Ψd3(t) is the §3 formula evaluated at base length d, with its own inner helpers as functions of ϕ and t. Stacking the four rod angles and laying out all helpers in one place:
By closure we can drop the last rod angle and view ML4 as a 2-sphere embedded in T3 rather than T4. The savings really pay off here: T3 as a periodic cube is drawable; T4 is not.
The animation above illustrates this parameterization with the domain S2 on the left and its image ⊂T3 on the right. Click and drag the point on the domain to explore the parameterization.
Position coordinates
The position-version recipe gives
ΨL4(ϕ,t)=(p^3⋅Ψd3(t),p3),
with p3=L−eiθ the new outermost interior hinge and p^3=p3/∣p3∣ the rotation onto the ambient frame. The inner Ψd3(t) from §3 produces the two interior hinges of an Md3 chain in its sub-frame:
Multiplying by p^3 rotates these into the ambient frame. The middle hinge inherits the recurring “endpoint minus last rod” identity, one level in:
p2=p^3⋅p2∘=p^3(d−eiθin)=p3−p^3eiθin,
using p^3⋅d=p3. Same shape as p3=L−eiθ, but with the ambient-frame “endpoint” p3 taking the role of L and the rotated unit vector p^3eiθin taking the role of the last rod eiθ. The innermost hinge inherits the elbow formula:
p1=p^3⋅p1∘=2p2+2∣p2∣iνinp2,
since rotation preserves both the elbow’s relative geometry and the modulus ∣p2∣=∣p2∘∣=din. Boxed:
The recursion peels rods off from the outside in: each level adds an outer hinge of the form (previous level’s “endpoint”) − (rotated unit vector), and the innermost level closes with the elbow formula.
The animation below shows this map, directly from S2 to the linkage itself. Click and drag the point on the 2-sphere to explore the configuration space.