Toilet paper tubes have the curious property that you can flatten them, cut out loops, and link the loops together without fasteners.
For a couple years now, I’ve hoarded every used cardboard toilet paper tube that’s passed through our home. Feeling inspired after seeing a tweet (with apologies, author long since forgotten), I stockpiled tubes and built a Buckyball. Vines in the bedroom now climb a six foot carbon nanotube trellis (Charmin nanotube, if you will, and not exactly nano either, for that matter). And Alison Martin’s work continuously inspires me.
Update: I’ve tracked down some precedent, though perhaps not the actual tweet that inspired me as this seems to be a popular project! See tweets by @Ian_Willey and—with excellent instructions—@mrallanmaths.
This notebook represents my attempt to step things up. It provides some basic instructions and suggestions, as well as a simulator to help the toilet-paper-tube-constrained make the best use of what they have. In hindsight, the simulation certainly wasn’t necessary. And at any rate, there’s really no upper limit to tackling this with trial and error; the recyclability means there’s no need to open a family dialogue about where to store the large geometric constructions that result.
Fabrication
My brand is regular Trader Joe’s toilet paper, though I have no reason to believe anything about the brand is particularly important, beyond consistency of diameter—with the exception of those cowards who make tube-free toilet paper rolls. Those won’t work. I’ve considered side-stepping material collection and waiting to buy tag board when shelter-in-place eases, though to be honest, the recycled nature of the raw materials is a primary factor which draws me to this project.
Accumulating raw materials is simple. Flatten the tubes and—if you live with family—stash them somewhere a family member is unlikely to find them, lest you be required to explain yourself. Conversely, you may wish to avoid much wailing and gnashing of teeth and discuss your hoarding early on to prevent your stash from getting casually recycled.
The pattern below illustrates the required cuts. The angle required for three edges to join gracefully is , which makes the measurements easy. I’ve found a far easier method than measuring every tube though is to add opposing marks to one tube and use it as a template. I get about eight strips per tube.
Update: I’ve trended toward thicker strips, as it makes the final constructions a bit more robust. The only limit on thickness is they can’t be so thick that the joints on opposite ends interfere and prevent linking. Further simplifying, even cutting strips at flat 0° angles produces a visually appealing look and may save a bit of trouble.
Assembling the joints is straightforward. The pieces lock together in pleasing angles, requiring no additional fasteners up until the very last piece of the model, which requires a cut and some tape.
The illustration below shows how the joints interlock. I’d give more instruction, but if you actually want to do this, there’s no better way to learn than through experimentation. After some fumbling around, I learned to always attach new pieces by branching off in the same direction, after which it becomes quite repetitive.
Assembling larger patterns is where things start to get frustrating and difficult. I have little advice here except to rely heavily on patterns, examples, and patience. And perhaps the simulator below. For inspiration, the best paper I found is “The Topology of Fullerenes” by Schwerdtfeger, Wirz, and Avery.
In my initial attempt, I started making a torus and failed to appreciate just how much of a material shortage I’d encounter. After some iteration though, I tried out different constructions. My favorite so far is our rabbit tunnel.
With quiet sheltered-in-place weekends and little access to toilet paper (at which point these constructions quickly became the least of my worries), I dismantled my initial constructions, explored construction via simulation, and eventually settled on the model pictured at the top of the notebook. The rest of this notebook steps through simulation of these models.
I now return to the material collection phase. 🧻🧻🧻🧻🧻🧻🧻
Simulation
We’ll get right to the point and present the finished simulator, followed by an explanation of how it works. It’s really non-scientific in the sense that I’ve pulled forces and energies out of the sky to get it to look nice. It’s not without some physical justification, but there’s little motivation by legit physical chemistry, and the optimization method is staggeringly inefficient.
We represent the model as a graph consisting of vertices and edges. The topology follows one rule:
- Every vertex has no more than three outgoing edges.
This rule is enough to constrain the topology, though it says nothing about the particular geometry of the result in three-dimensional space.
Notes:
- You’ll need a desktop computer to use the simulator.
- The genus 3 torus comes from the lovely construction of Alison Martin, whose work has certainly inspired a lot of this exploration to begin with!
- Most of the other constructions come from the paper listed above, “The Topology of Fullerenes” by Schwerdtfeger, Wirz, and Avery.
Physical model
The sections below outline how the simulation works. We take a simple approach to computing physical configuration in three dimensions. We write down an energy function that’s minimized by nice, physically pleasant configurations, then directly minimize the energy via gradient descent on the vertex positions.
The concept of gradient descent is simple. We compute the change in energy with respect to independent changes in each vertex position, then move each vertex slightly downhill, opposite the direction of the gradient. There are more efficient ways to minimize energy, but we simply take a simultaneous small step for all vertices.
Mathematical Statement
We write an arbitrary energy function for our graph that maps the configuration to a single real number,
where and are the vertex and edge of the graph, respectively. here is any useful function, picked out of the sky, such that it’s minimized when the graph reaches a desirable configuration. We compute the gradient with respect to the x-y-z coordinates of all vertex positions,
In the sense of rolling down a hill, this gradient points uphill so that we update the solution in the direction of a small downhill step. We compute the step of vertex as
where is some small number.
It’s no more complicated than that, but we must now select a function .
Axial stiffness
We start simple and add lengthwise (axial) stiffness to enforce uniform length. Given an edge connecting vertices and , we denote the length of the edge and the equilibrium length .
The minimum-energy configuration occurs when , so we construct an energy function
where is the axial stiffness. Note that when . Since is strictly non-negative, this is just fancy way of saying that the energy can’t get any lower than when the length is equal to the desired length; it’s the bottom of the hill.
If we differentiate this function with respect to the position of the two endpoints, then we obtain the gradient. For example, the energy gradient with respect to the coordinates of vertex is
The gradient with respect to the coordinates of vertex are equal and opposite.
Axial stiffness alone clearly does not accomplish our goal of maintaining pleasant configurations. We now add an additional type of stiffness: dihedral stiffness. The rationale is that edges meet at a preferred angle, . We therefore define the energy function
I’m sure chemistry has a lot to say about this topic, but it seems to be the case based on the structures produced that is the desired pairwise dihedral angle, and that angles of are simply the resulting compromise wherever three edges meet a vertex and result in three pairwise dihedral angles.
Torsional stiffness
Finally we tackle torsion about an edge.
The figure above shows six adjacent vertices connected by an edge. Torsional stiffness of the cardboard produces a rotational force which causes vertices , , , and to rotate toward flat.
Without the sort of physical justification required for a scientifically valid molecular dynamics simulation, we simply pick an energy function that’s minimized when the outer vertices are not twisted. We therefore define the unit vectors , , and :
and define the energy function:
Due to the square, this function takes the value when is either parallel or antiparallel to . In words, this means that the value is minimized when vertices , , , and exhibit no rotation relative to the central edge, .
Note importantly that if we did not normalize vectors , , and , then would depend upon the distance between the vertices, and the simulation would either blow up or collapse to a point, depending on the sign of . As it stands though, the constraint that , , and are unit vectors produces a strictly torsional force.
Computing the gradient of the above function without an explosion of terms is a bit challenging. I spent a couple sheets of paper giving it a try before recalling why Einstein summation notation is so useful in vector calculus.
Full derivation of the torsional energy gradient
Setup
Consider an edge connecting vertices and , with additional vertices , adjacent to , and vertices , adjacent to :
We define unit vectors along each edge:
where , etc.
Energy Function
The torsional energy measures misalignment between the planes defined by branches on either side of the central edge. We define:
This is minimized (equals ) when is parallel or antiparallel to , meaning the branches are coplanar.
Simplification Using the Lagrange Identity
Using the Lagrange identity for the dot product of two cross products:
Since is a unit vector (), this simplifies to:
so that .
In Einstein summation notation (repeated indices imply summation):
Derivatives of Unit Vectors
To compute gradients, we need the derivatives of unit vectors with respect to their endpoint positions. For :
where is the Kronecker delta. The analogous expressions hold for and
Gradient Computation
Applying the chain rule to :
Since , we differentiate term by term.
Gradient with respect to :
Only depends on :
Substituting the derivative:
Multiplying by and rearranging terms (noting that ):
Gradient with respect to :
The derivative has opposite sign:
Note that , as expected since shifting both and together should not change the energy.
Gradient with respect to :
Only depends on . Since :
Multiplying by and simplifying:
Gradient with respect to :
Since , we have :
Gradient with respect to :
Only depends on . Since :
Multiplying by and simplifying:
Gradient with respect to :
Since , we have :
Summary
These eighteen gradient components (three spatial coordinates for each of six vertices) drive the simulation toward configurations where the branches on either side of each edge are coplanar. The normalization of , , and ensures that these forces are purely torsional and do not depend on edge lengths.