Day 178 – Borromean rings

Day 178 – Borromean rings

Day 178 – Borromean rings 640 480 mathgrrl

When I give talks about 3D printing and knot theory, I often tell the story of my student Olivia who created and printed a 3D model of the Borromean rings as her first project in my class. The Borromean rings consist of three rings arranged in such a way that no two of the rings are linked to each other, but the three together are linked and cannot come apart. Olivia’s model came out beautifully, but she had a confession: no matter how hard she tried, she could not make the Borromean rings model out of circles. She reported to the class that she had to resort to using slightly elliptical rings instead of circles, and that in fact, she wasn’t even sure that it was possible to construct the darn thing out circles. She had independently discovered what Linstrom and Zetterstrom proved in 1991 in their paper Borromean circles are impossible (American Mathematical Monthly, Vol. 98, Issue 4)! What’s more, when you hold the 3D model in your hand it is immediately obvious why constructing the Borromean rings out of circles doesn’t work.

Although I’ve told this story many, many times, it always ends on a lame note – with me realizing that I don’t own a copy of Olivia’s model to show! Today, I fixed that problem and made a model of the Borromean rings in OpenSCAD:

The rings don’t touch each other and you can flatten them to get a braid link conformation of the form AbAbAb, or in other words, the spiral link S(3,3,(1,-1)).

STL file:
Thingiverse link:

Settings: MakerWare with our custom knot-slicing profile from Day 110 to minimize support. Only very thin sheets of support were generated, which worked wonderfully.

Technical notes: Using the parametric equations for an ellipse and kitwallace’s tubify code, we get the following OpenSCAD code:

// mathgrrl Borromean

// nearly a circle
function f(t) = 
[ 25*cos(t),

module tubify(r,step,end) {
for (t=[0: step: end+step]) {
hull() {
translate(f(t)) sphere(r);
translate(f(t+step)) sphere(r);

// set faces

// make the three rings
rotate([0,0,0]) rotate([45,45,0])
color(“red”) tubify(r=2.2,step=5,end=360);
rotate([0,0,120]) rotate([45,45,0])
color(“yellow”) tubify(r=2.2,step=5,end=360);
rotate([0,0,240]) rotate([45,45,0])
color(“blue”) tubify(r=2.2,step=5,end=360);

Stuff to change: If you printed these rings one at a time then you could slip the first two around/inside the third just before it finished printing. In that way you could make a cool three-color model! Here are the necessary files for a horizontal ring and a vertical ring.

Pictures of Olivia’s original Borromean rings, which she constructed in Tinkercad, can be found at an old post of this story at

Leave a Reply

Back to top