Books · The Fiddler: Solutions
Chapter 83
Can You Make a Toilet Paper Roll?
You have a parallelogram of cardboard with side lengths and units and interior angles of and . By swirling two opposite edges together, you wrap it into the lateral surface of a right cylinder, a little cardboard tube. What is the volume of the cylinder you can make from this piece of cardboard?
The Fiddler, Zach Wissner-Gross, September 20, 2024(original post)
Solution
Wrapping the parallelogram into a right cylinder turns one pair of opposite edges into the seam and the other pair into the two circular rims. Join the two short edges and the long edges (length ) become the rims: the circumference is , so the radius is , and the height is the perpendicular distance across, , giving volume . Join the long edges instead and the circumference is , the radius , the height , for volume . So the two tubes have volumes Both have lateral surface area , exactly the parallelogram’s area , a useful check.
The computation
Build each tube from the geometry: the joined edge fixes nothing, the perpendicular edge becomes the rim’s circumference (hence the radius), and the slanted height is the side times .
import numpy as np
theta = np.radians(30)
def tube(rim_edge, slant_edge): # rim_edge wraps into the circle
r = rim_edge / (2 * np.pi)
h = slant_edge * np.sin(theta)
return np.pi * r**2 * h
print(tube(6, 2), tube(2, 6)) # 2.8648 0.9549 = 9/pi, 3/pi
Extra Credit
Let be the average volume of the two cylinders you can make from a parallelogram of area . What is the smallest possible ?
Solution
For a parallelogram of sides and area , joining the -edges gives radius and height , hence volume ; the other joining gives . With the two volumes are and , averaging . The constraint forces (equality only at a right angle), and then (equality only at ). So the minimum is achieved by the unit square, whose two cylinders are identical.
The computation
Minimise the average volume over all area-one parallelograms (eliminating through the area constraint); the optimum is the unit square.
from scipy.optimize import minimize
def avg_volume(x):
p, th = x; q = 1 / (p * np.sin(th)) # area = p q sin(theta) = 1
return (p + q) / (8 * np.pi)
r = minimize(avg_volume, [1.3, np.radians(70)], bounds=[(0.3, 3), (0.3, np.pi/2)])
print(round(r.fun, 4), round(1 / (4*np.pi), 4)) # 0.0796 0.0796