Imagine two ants crawling around a circle at different speeds and draw a line between the two ants at regular time intervals.

The position of the two ants at time t are (cos pt, sin pt) and (cos qt, sin qt) where p and q are integers, p > q, and t comes from dividing the interval [0, 2π] into an integer number of points.

These lines form an envelope, a set of tangent lines, around a curve in the middle known as an epicycloid.

I found this via [1].

An interesting tidbit from the paper is that the number of cusps in each epicycloid is (p – q) / gcd(p, q).

Here are some examples.

Here’s the code that produced the plots above.

from numpy import sin, cos, linspace, pi import matplotlib.

pyplot as plt def draw(p, q, n=200): xs = linspace(0, 2*pi, n) plt.

axes().

set_aspect(1) plt.

axis(off) for x in xs: plt.

plot([cos(p*x), cos(q*x)], [sin(p*x), sin(q*x)], “b-“, alpha=0.

4) plt.

show() plt.

close() draw(4, 3) draw(4, 1) draw(7, 3) draw(9, 4) [1] Andrew Simoson.

An Envelope for a Spirograph.

The College Mathematics Journal, Vol.

28, No.

2 (Mar.

, 1997), pp.

134-139.