Skip to content
Vamshi Jandhyala

Books · The Riddler

Chapter 24

Help Us Find These Missing Pieces

Riddler Express

The regular hexagon below has area 1. What is the area of the shaded region?

image

Solution

Put the hexagon at the origin with circumradius 11, so its area is 332\tfrac{3\sqrt3}{2} and its vertices include the left vertex (1,0)(-1,0), the top-left vertex (12,32)(-\tfrac12,\tfrac{\sqrt3}{2}), and the centre O=(0,0)O=(0,0). The drawn lines that bound the shaded piece are the horizontal axis y=0y=0, the vertical line x=12x=-\tfrac12 through the top-left vertex, the diagonal from (1,0)(-1,0) to the top-right vertex (12,32)(\tfrac12,\tfrac{\sqrt3}{2}), and the diagonal from OO to the top-left vertex. Their crossings give the shaded quadrilateral (12,0),(12,36),(14,34),(0,0).\Big(-\tfrac12,\,0\Big),\quad \Big(-\tfrac12,\,\tfrac{\sqrt3}{6}\Big),\quad \Big(-\tfrac14,\,\tfrac{\sqrt3}{4}\Big),\quad (0,0). Its area by the shoelace formula is 312\tfrac{\sqrt3}{12}, which as a fraction of the hexagon is 3/1233/2=118.\frac{\sqrt3/12}{3\sqrt3/2} = \boxed{\tfrac{1}{18}}. Equivalently, the piece fills exactly one third of the upper-left equilateral triangle O,(1,0),(12,32)O,(-1,0),(-\tfrac12,\tfrac{\sqrt3}{2}), which is itself one sixth of the hexagon.

The computation

Take the four corners in hexagon coordinates and apply the shoelace formula symbolically, then divide by the hexagon’s area.

import sympy as sp
s = sp.sqrt(3)
pts = [(sp.Rational(-1,2), 0), (sp.Rational(-1,2), s/6),
       (sp.Rational(-1,4), s/4), (0, 0)]
area = abs(sum(pts[i][0]*pts[(i+1)%4][1] - pts[(i+1)%4][0]*pts[i][1]
               for i in range(4))) / 2
print(sp.simplify(area / (3*s/2)))     # 1/18

Riddler Classic

The large circle has radius 10, the medium circle radius 5, and the small orange circle radius 2. The orange circle crawls counterclockwise along the edge of the large circle until it meets the medium circle, then crawls up the edge of the medium circle to its crest. What is the area of the shaded orange region it sweeps out?

image

Solution

Center the large circle at the origin. The orange disk (radius 22) keeps its center on the large circle and rides counterclockwise from the top (0,10)(0,10) down the left side to the bottom (0,10)(0,-10), a half turn. The medium circle, of radius 55, is tangent to the large circle at that bottom point, so its center is (0,5)(0,-5); the orange disk transfers onto it and rides another half turn up to the crest (0,0)(0,0).

As the center of a radius-rr disk travels a half circle of radius ρ\rho, the disk paints a half-annulus between radii ρr\rho-r and ρ+r\rho+r, of area 12π((ρ+r)2(ρr)2)=2πρr\tfrac12\pi\big((\rho+r)^2-(\rho-r)^2\big) = 2\pi\rho r. The two arcs contribute 2π(10)(2)=40πand2π(5)(2)=20π.2\pi(10)(2) = 40\pi \quad\text{and}\quad 2\pi(5)(2) = 20\pi. The path has two loose ends, at the very top of the large circle and at the crest of the medium circle, each rounded off by a semicircular cap of radius 22, together a full disk of area 4π4\pi; at the tangent point the disk passes through smoothly and the two half-annuli join without gap or overlap. The shaded area is therefore 40π+20π+4π=64π.40\pi + 20\pi + 4\pi = \boxed{64\pi}.

The computation

Trace the swept region directly. Lay a fine grid over the plane and mark every point lying within distance 22 of either arc of the center’s path; the marked area converges to 64π64\pi.

import numpy as np
def near_arc(P, c, rho, a0, a1):         # distance from points P to a circular arc
    d = P - c; ang = np.arctan2(d[..., 1], d[..., 0]) % (2*np.pi)
    lo, hi = a0 % (2*np.pi), a1 % (2*np.pi)
    on = (ang >= lo) & (ang <= hi) if lo <= hi else (ang >= lo) | (ang <= hi)
    radial = np.abs(np.hypot(d[..., 0], d[..., 1]) - rho)
    ends = np.minimum(*[np.hypot(P[..., 0]-c[0]-rho*np.cos(a),
                                 P[..., 1]-c[1]-rho*np.sin(a)) for a in (a0, a1)])
    return np.where(on, radial, ends)
g = np.arange(-13, 13, 0.01); X, Y = np.meshgrid(g, g); P = np.stack([X, Y], -1)
d1 = near_arc(P, np.array([0., 0]), 10, np.pi/2, 3*np.pi/2)     # big circle, half turn
d2 = near_arc(P, np.array([0., -5]), 5, 3*np.pi/2, 5*np.pi/2)   # medium circle, half turn
covered = (d1 <= 2) | (d2 <= 2)
print(covered.sum() * 0.01**2, 64*np.pi)                       # ~201.06 = 64*pi