Sphere Eversion Program


In 1957, Smale proved that a sphere can be turned inside out, without any tears, sharp creases or discontinuities, if the surface of the sphere is allowed to intersect itself. Since Smale's proof, a number of explicit eversions of the sphere have been discovered (Shapiro, 1961; Phillips, 1966; Morin, 1967; Thurston, mid-seventies).

sphereEversion* is a program that displays a sphere undergoing the Thurston eversion. Users can

*Based on a software program by Nathaniel Thurston developed at The Geometry Center, University of Minnesota. Used with permission.


Update (Feb 2005, version 0.4) : I have ported sphereEversion to GLUT, so that it now runs on MS Windows. I have also added support for alpha-blending (semi-transparency).

Version 0.4, executable for MS Windows: sphereEversion-0.4-exec.zip Consult the included README.TXT file for instructions on running.

Version 0.4, source code: sphereEversion-0.4-src.zip Runs on linux, MS Windows, and other platforms. Written in C++. Requires OpenGL, GLUT, STL, POSIX.

Update (Oct 26, 2001, version 0.3.1) : Jamie Zawinski helped me add a root window mode (enabled by running sphereEversion with a --root flag) so that sphereEversion could be invoked by xscreensaver.

Version 0.3.1, source code: sphereEversion-0.3.1.tar.gz Runs on a Unix/X11 system. Requires OpenGL and Xlib.

Update (Nov 27, 2000, version 0.2) : Many thanks to Ralph Giles for providing a patch that makes sphereEversion easier to compile on a GNU/Linux box.

Disclaimer: Use at your own risk. The software on this webpage is provided "as is" and without warranty of any kind, either express or implied.


The starting point for this project was the source code for a program called evert, available from The Geometry Center of the University of Minnesota. evert was written by Nathaniel Thurston, and is based on ideas of Bill Thurston. evert is a program that computes a description of the 3D geometry of an everting sphere at a given point during the Thurston eversion, and spits out this description into a text file.

To make the sphereEversion program, I had to slightly hack the source code for evert, and then I wrote an OpenGL layer on top of it to render the everting sphere in 3D.

The code for generating the sphere's geometry, which was taken from evert, is rather complicated (I certainly don't understand how it works !). The code makes use of things called "jets" and vectors of "jets". I asked the author of evert what a "jet" is. Here's his response by e-mail:

     A jet is really nothing more than the collection of all of the low-order
     derivatives of a function up to a certain point.  For instance, the
     two-jet of f(x), a function of one variable, can be represented
     by the triple (f, df/dx, d^2f/dx^2)
It turns out that if there aren't enough strips in the Thurston eversion, then the eversion will not be "smooth". Apparently, 8 strips are enough to ensure continuity, but I don't know what the minimum required number is. I asked the author of evert if he knew. His response:
     Actually, I don't know the minimum number of strips needed.  We determined
     that there was no pinching at 8 by watching carefully as a single strip
     went through its contortions.
I asked Silvio Levy, another person involved in the creation of evert, if he knew the minimum number of strips that guarantees no pinch points. His response:
     This depends on the exact equation used for the eversion.  I don't
     think anyone has made the calculations for the particular equations
     that Nathaniel used.  You can change the number of strips and try to
     spot pinch points as you see the evolution.
If you are aware of the minimum number of strips, I would be interested in hearing from you.


Here are some related sites on the web.
one high-quality mpeg/quicktime of the Thurston eversion
one mpeg of a partial eversion plus some static pictures
three mpegs of sphere eversions plus 1 mpeg of a cylinder eversion
historical notes with links to images
more historical notes with inline images
One Nice Pic ! (excellent use of transparancy)
Erik de Neve's (pseudo?)recipe for Sphere Eversion

Screen Shots

These are screen shots of sphereEversion in action.

Alpha-blending in version 0.4:

The screen shots below are from an older version (<=0.3.1) which supported multiple "rotation" (i.e. camera tumble) modes.

Below, the sphere becomes "corrugated", the first step in the eversion.

Next, the north and south poles are pushed through each other. Here one eighth of the sphere has been cut away to reveal some of the interior.

Next, the corrugations are twisted 180°, and the sphere starts to deflate.

Here some of the surface is cut away.

During deflation the interior becomes very complex. This is a zoom-in on the equatorial cross-section (the southern hemisphere has been cut away).

Here, seven eighths of the sphere have been cut away, leaving a single "strip". It is easier to visualize the full eversion if one first studies a single strip as twists and turns inside out.