Drawing on Spheres

In my last post I started to catch up on documenting some old projects. Today I’m going to jump ahead to one of my latest. About two months ago I purchased an EggBot from Evil Mad Scientist. It’s a little pen plotter, designed to draw on small spherical objects such as eggs, Christmas ornaments, golf balls, etc. The maximum diameter object it will accommodate is 4″. It happened to be Christmas time, and our local crafts store was selling clear “DIY” Christmas ornaments that were exactly 4″. How convenient!

Here’s my device, making a globe:

You’ll notice in the pictures that the sphere is held in the device so that a motor can spin it. There is also a pen hovering above that swings back and forth in an arc. The amount the sphere is rotated, and the amount the pen has been moved from center, form two independent coordinates, exactly like latitude and longitude on the Earth.

The EggBot is controlled by an Inkscape extension. You can take any 2D design, load it into Inkscape, and send it to the EggBot. The x- and y- coordinates of each point in your design then get translated to the latitude/longitude location of the pen, and you watch the magic happen!

My more mathematically savvy readers will immediately notice the problem here. It’s a classic Theorem of Gauss that the mapping from 2D x-y coordinates to spherical coordinates will necessary introduce distortion. In fact, from what I can tell all of the promotional images on the EggBot website, and every image I found on the internet of EggBot-produced designs, suffer from this problem: their designs are all stretched out near the equator, and bunched up closer to the poles.

I wanted to avoid this problem, so instead of starting with a 2D design and wrapping it around the sphere, I began with the inverse problem: taking a design on a sphere and unwrapping it to the plane. As usual, I used Rhino/Grasshopper.

The first design I created (mostly as a test case to see if I could really avoid the distortion issue) was a classic soccer-ball pattern, made up of pentagons and hexagons. There’s a beautiful plugin for Rhino/Grasshopper by Dale Fugier containing hundreds of polyhedra (including the soccer ball pattern) that made an easy starting point. Here’s his “chamfered dodecahedron”.

Chamfered dodecahedron in Rhino 3D

From there, I inflated it to a sphere, selected several points along each edge curve, read off the latitude and longitude of each point, re-interpreted those numbers as x-y coordinates, and finally reconstructed planar curves through those sets of points in the x-y plane.

Unwrapped soccer ball pattern

When those curves are sent to the Eggbot, they are translated back to latitude-longitude coordinates and plotted correctly. (There’s a little more to it, since you have to do something special for curves on the sphere that cross the “Prime Meridian,” but that’s the basic idea.) Here’s the resulting plot:

Eggbot soccer ball

As you can see, all the hexagons look about the same size, as desired! With that test plot done, I started to have some fun. Next up was an icosahedral design (a polyhedron with 20 triangular faces), with a fun line pattern in each face.

Eggbot Icosahedral line pattern

Next, I thought about my old experiments with phyllotaxis patterns, like those on pinecones and sunflowers. (See my posts here and here.) Here’s a phyllotaxis pattern on a sphere.

EggBot Phyllotaxis

In the coming weeks I’ll share a lot more of my EggBot creations. I’ll end this post with one more. I’ve always liked Craig Kaplan’s Islamic sphere patterns. There’s a nice Grasshopper plugin called Parakeet that implements Craig’s algorithm for creating Islamic patterns, as well as many others. With a minimal amount of work, any of those can be turned into plot-able EggBot creations.

EggBot Islamic Sphere design

1 thought on “Drawing on Spheres

Leave a Reply