Modeling the paper Mobius Band

At some point, perhaps in grade school, most people encounter the Mobius band: a simple shape made from a rectangular strip of paper by giving one end a half-twist before looping it around and gluing it to the other. The resulting surface has many interesting properties, both aesthetic and mathematical. Perhaps the most famous artistic image of it is from MC Escher:

Last September I was contacted by someone interested in 3D printing a steel Mobius band. I said “no problem” and within a few minutes had written down an explicit parameterization (set of equations) and had one modeled. When I sent this to the client, he was unhappy. The band I had modeled was mathematically a Mobius band, but not the one you’d get if you made it out of paper. It was stretched in various places, which paper just won’t do without tearing. Here’s an image of the one I made, with the image of a gum wrapper added to it so you can see the stretching.

Once I understood the problem, I realized just how non-trivial it is. In fact, after asking lots of mathematicians, I now believe that it’s unknown how to explicitly find a parameterization for a Mobius band that you’d get from a strip of paper. Here’s a more general problem: Given a 3D curve in space, what shape would a rectangular strip of paper take on if it was bent so the line down its center followed the curve? (For the mathematicians: obvious conditions, such as having Gaussian curvature zero, or being a ruled surface, are not sufficient.)

To satisfy the client, I just virtually “hand”-modeled something that looked close to photos of a paper model. Here was the resulting piece, 3D printed in steel by Shapeways.

I didn’t think much more about this problem until about a month ago, when I was contacted by an artist who wanted to 3D-print various surfaces with a uniform grid of holes, to sew beads on. I realized immediately that the uniformity of the grid forced the kinds of surfaces she was interested to be those that could be made by bending a rectangular strip of paper!

This time I had more tools at my disposal. I’m now much more familiar with Kangaroo, a program for simulating objects endowed with physical properties. Kangaroo is a freely available extension of Grasshopper, a plug-in for Rhino 3D. (Rhino is a popular CAD package used primarily by architects, jewelry designers, artists and many of those mathematicians I know who do any 3D modeling.)

The way one works with Kangaroo is to define a set of geometric objects, and assign various forces to them. Those forces can be internal (e.g. turning line segments of the model into springs) or external (e.g. simulated gravity). After some internet searching I knew Kangaroo could be useful for the paper bending problem. Back in 2011 Marten Nettelbladt posted some videos with similar Kangaroo experiments. In particular, in this video he sets the positions of each end of the strip in space, and the program finds the position of the rest of it.  However, he doesn’t post his GH script there, and I was a little stuck figuring it out on my own (it turned out that was because I was trying to do it with Kangaroo2, when its much easier with the older Kangaroo.)

I then came across this discussion in the Grasshopper forum in which Daniel Gonzales Abalde shares a script that is very similar to what I was looking for. In that script he simulates the drooping of a sheet of paper with user-determined corner points. The key to making it work is the following:

  1. Triangulate the “paper” surface with a triangular grid of (roughly) equilateral triangles.
  2. For each internal edge, apply a relatively weak  “hinge force” to keep the adjacent triangles in roughly the same plane. This is what makes the extrinsic geometry similar to physical paper.
  3. Apply a strong spring force along each edge of the triangulation, with each spring having equal rest-length, to preserve the intrinsic geometry of the object.

The first step turned out to be the hardest, since there was no uniform triangular grid component in Grasshopper, or any of the zillions of plug-ins I have installed. But Gonzales’ post had some hints how to do this, and soon I was able to define such grids on cylinders and Mobius bands.

My first test was to try it out on a surface where I definitely knew the answer. The idea was to begin with a planar annulus (washer-shaped surface) and apply Kangaroo forces that would turn it in to something one could make from a rectangular strip of paper. If it worked, I knew I’d end up with a round cylinder. Once again, the graphic that is imprinted on the surface is there so you can see the internal distortion (stretching) of the surface initially, and how that distortion goes away in the final conformation.


When I was sure it worked, I moved on to the Mobius Band. The final frame in this video is precisely the Mobius band shape I had been after since last September: its the shape of a Mobius band made from a rectangular strip of paper.


Next, for fun, it only took a few seconds to change the initial definition of my object so that the Mobius band was made with three half-twists, instead of one (technically, its a Mobius band if it is made with any odd number of half-twists.) The resulting surface was precisely one of the ones the bead artist I’ve been working with was interested in.

You’ll notice in this video that the surface passes through itself before settling down on a stable configuration. While it’s possible to set up Kangaroo objects that avoid self-intersection, I didn’t bother. That actually led to an interesting experiment. In this final video I tried to find a paper-configuration of the 5-twisted Mobius band, but it just passed through itself and ended up identical to the singly-twisted band. While that’s not the effect I wanted, I  still think it’s interesting to watch.

For those interested, here’s what the GH script looks like. Once I understood how to do it, most of the work went in to the cluster on the left, where I set up a Mobius band with a triangular mesh. The script itself is posted here.

Finally, since my book is still very new, I can’t resist ending this post without some gratuitous advertising with this graphic provided by my publisher…

Modeling the paper Mobius Band

My New Grasshopper book is out!

In the next few posts I’ll briefly pause my discussion of organic modeling techniques, but I will come back to that soon (next up in the series will be on Diffusion Limited Aggregation… very cool stuff!).

Today’s post is simply a brief announcement, just in case anyone missed all of my twitter, facebook, and forum posts about it… My new Grasshopper book has just been published!!

In the first week it has quickly become the #1 new release in Amazon’s “3D Graphic Design” category, and has at times been as high as #3 in that category overall.

Here’s a little more about the content and intended audience than what’s on the publishers website. You can also find this in the discussion at the Grasshopper forum, here.

The book is in three distinct parts. The first part is a fairly basic introduction to the package, and is geared mostly toward beginners.  Here I present several of the most common components with a series of small examples. There are discussions of lists, data trees, data manipulation with components such as Cross Reference and Flip, conditional list processing with the Dispatch and Weave components, curve parameters, surface parameters, mapping geometry with Morph components, and manipulating Meshes.

In the second part I present four advanced tutorials so readers can see how to put together lots of ideas to make complex objects. My hope is that even experts will get something out of looking at these tutorials. They are all original, and experienced Grasshopper users may (hopefully) see Grasshopper get used here in ways they hadn’t seen before. Here’s one of the images from this part, in a tutorial on making custom bevel shapes with only native Grasshopper components:

As stated in the product description, the third pard is a component reference. Most of the work here was taking the help file descriptions of each component and typesetting (read: fighting with LaTeX) them in an easy-to-read format that might be useful for any Grasshopper user.

If the book does well, I’m planning a more advanced sequel. I’m very open to suggestions for content. One person has already suggested I include information on writing your own components, which is something that I think would be good to include. I was also planning on giving some information on the use of several common plug-ins (e.g. Kangaroo, Anemone, Mesh+, etc). Please post other suggestions here!

My New Grasshopper book is out!