June 6, 2011

At TechShop I have access to a 60 Watt laser cutter. As a gift to my son I wanted to make a jigsaw puzzle of a picture of him. I printed out the picture on a color laser printer:

I used a spray adhesive (Elmer’s Craft Bond) to glue it to a piece of 8"×11" hardboard I got at Home Depot. For the puzzle shapes I wrote a Python program that generates an SVG file, which can be imported into Corel Draw and positioned and scaled properly. The file looks like this:

The interesting part of the program was the shape of the knob. I ended up using three circle arcs:

The radius of the smaller circle is computed randomly. The radius of the larger one is 80% bigger than that of the smaller ones. We then need to compute the position of the larger circle and the angles where the circles should start and stop being drawn. There’s a right triangle we can use to compute all that:

Note that the hypotenuse goes through the transition point between the circle arcs. The base of the triangle is half the distance between the small circles (which we also choose randomly within a nice range). The hypotenuse is the sum of the small and large radii. The height you compute using the Pythagorean Theorem, and that plus the small radius gets you the position of the large circle.

The start and stop angles of the arcs you can get using trigonometry and the lengths of the sides of the triangle. For example, the top angle of the triangle is the arc-sine of the base divided by the hypotenuse. See the code for details of how these values are used.

A nice enhancement would be to randomize the widths of the rows and columns. In fact the lines themselves should not necessarily be perfectly vertical or horizontal. These kinds of variations make it easier to solve the puzzle—the pieces don’t all look the same, and it’s more obvious when you’ve mismatched two pieces.

Here’s what the finished pieces look like:

Update 9/5/2013: Tony Schick wanted to make a large version of this puzzle. I modified the program to generate 80 SVG files, one for each piece. He cut them out individually on a laser cutter and assembled the whole thing on a large plan printer at the University of South Australia. He used this awesome photo of his grandson:

The source code is available on GitHub.