Skip to content
Vamshi Jandhyala

Books · The Fiddler: Solutions

Chapter 25

Can You Topple the Tower?

A block tower is a solid rectangular prism of height 22 on a square base of side 11. A second prism of the same material, with a base LL by 11 and height 11, is fixed to the top half of the first block, sticking out to one side as an overhang. When LL grows past some value, the tower topples. What is that critical length LL?

The Fiddler, Zach Wissner-Gross, December 12, 2025(original post)

The lower 1×1×21\times1\times2 block with the L×1×1L\times1\times1 overhang fixed to its top half. The tower tips about the edge x=1x=1 once the combined centre of mass passes beyond it.

Solution

Take the ground edge of the base as x=0x=0 and the far edge as x=1x=1; the overhang juts out to x>1x>1. The tower tips when the combined centre of mass passes the supporting edge x=1x=1. Density is uniform, so mass is volume: the lower block has mass 22 with its centre at x=12x=\tfrac12, and the overhang has mass LL with its centre at x=1+L2x=1+\tfrac L2. Height does not enter, since toppling about a horizontal edge depends only on the horizontal position of the centre of mass. Setting that position to the pivot, 212+L(1+L2)2+L=1    1+L+L22=2+L    L2=2.\frac{2\cdot\tfrac12 + L\bigl(1+\tfrac L2\bigr)}{2 + L} = 1 \;\Longrightarrow\; 1 + L + \tfrac{L^2}{2} = 2 + L \;\Longrightarrow\; L^2 = 2 . So the tower topples once L>2.L > \boxed{\sqrt2}.

The computation

Solve the toppling condition itself: set the combined centre of mass (mass 22 at x=12x=\tfrac12, mass LL at x=1+L2x=1+\tfrac L2) equal to the pivot x=1x=1 and solve for LL.

from sympy import symbols, solve
L = symbols('L', positive=True)
print(solve((2*0.5 + L*(1 + L/2)) - 1*(2 + L), L))   # [sqrt(2)]

Extra Credit

Now the tower is an annular sector: the region between two arcs of angle θ\theta on circles of radius 11 and 22. For small θ\theta it rests happily on one of its two flat radial faces; past some angle it can no longer balance on a flat face. What is that critical θ\theta?

The annular sector resting on its radial face. As θ\theta grows, the centre of mass drifts inward; balance is lost when it reaches the inner end of the face at x=1x=1.

Solution

Rest the sector on its radial face along the xx-axis from (1,0)(1,0) to (2,0)(2,0), the body curving up through angles 00 to θ\theta. Using polar coordinates with area element rdrdφr\,dr\,d\varphi, the horizontal centre of mass is xˉ=1A0θ ⁣ ⁣12(rcosφ)rdrdφ=14sinθ9θ.\bar x = \frac{1}{A}\int_0^\theta\!\!\int_1^2 (r\cos\varphi)\,r\,dr\,d\varphi = \frac{14\sin\theta}{9\theta}. As θ0\theta\to0 this is 1491.56\tfrac{14}9\approx1.56, safely inside the face [1,2][1,2]; balance is lost when xˉ\bar x reaches the inner edge x=1x=1, that is when sinθ=914θ\sin\theta=\tfrac{9}{14}\theta, whose positive root is θ=1.555 rad  89.1.\theta = \boxed{1.555\ldots\text{ rad}}\;\approx 89.1^\circ.

The computation

Integrate the sector’s geometry directly: for each θ\theta compute the horizontal centroid xˉ(θ)\bar x(\theta) on a polar grid, then root-find the angle at which it slips back to the inner edge x=1x=1.

import numpy as np
from scipy.optimize import brentq
def centroid_x(theta):
    r = np.linspace(1, 2, 500); phi = np.linspace(0, theta, 500)
    R, PHI = np.meshgrid(r, phi); w = R                # area element r dr dphi
    return (R*np.cos(PHI)*w).sum()/w.sum()
theta = brentq(lambda t: centroid_x(t) - 1, 0.5, 3.0)
print(round(theta, 3), round(np.degrees(theta), 1))    # 1.555  89.1