Towards the end of those 3 years, i.e., a few months ago, I began to get interested in 3D printing. The idea to have a replacement of my missing wooden puzzle made occurred to me. Although I lacked the puzzle, I had typed the coordinates of all the pieces into my computer about 10 years before (for a 3D rendering project I was working on). It had been pretty painful work typing up all those coordinates so I had always been careful not to lose them. Now, finally, they were going to be really useful!
There are a number of techniques including selective laser sintering, fused deposition modeling and DLP/stereolithography (this last term is a little loose). Each of these builds up the 3D model as a series of relatively thin (usually ~0.1mm) 2D slices and as such are additive processes in contrast to more traditional machining methods. There are a number of firms making the various types of 3D printing machines including ZCorp, Eos, Stratasys and Objet. There are even two open source 3D-printing possibilities, that are financially withing range of many a sufficiently interested hobbyest: Makerbot and Reprap. Finally there are several web-based firms which offer to 3D print a model on an industrial machine and post the results back to you. These firms include:
![]() | i.materialise using many machines |
![]() | Ponoko using ZCorp SLS machine machines (Ponoko also offer excellent 2D laser cutting services) |
![]() | Sculpteo using ZPrinter 650 by ZCorp and Formiga P100 by Eos machines |
![]() | Shapeways using Stratasys FDM 400mc and Objet Eden 500(V) machines |
from geometry import *
from collections import defaultdict
import sys
#...
piece = Solid(sys.argv[1][:-3] if sys.argv[1].endswith('.3d') else sys.argv[1])
piece.read_from_3d_file()
piece.fix_normals()
piece.fix_T_junctions()
piece.create_clearance(0.5, 25)
piece.place_on_z_plane(int(sys.argv[2]), int(sys.argv[3])) # Sorry, horrible hack!
piece.write_to_stl_file()
is available here, the raw input files are available here and finally the output, ready for 3D printing, is available here.
Finally, with my data ready and in the right format, I uploaded my STL file to i.materialise. I was curious to see what their "alumide" material (a mixture of polyamide and aluminium powder) would be like so I requested to have my puzzle printed as alumide using selective laser sintering. I was pleased with the results:
Record ID | Piece | Normal direction | Plane 1 location | Plane 2 location | Theoretical distance | Measured distance | Error |
1 | 1 | z | 0 | 19.5 | 19.5 | 19.67 | 0.17 |
2 | 1 | z | 0 | 19.5 | 19.5 | 19.73 | 0.23 |
3 | 1 | x | -25 | 25 | 50 | 50.29 | 0.29 |
4 | 1 | x | -25 | 25 | 50 | 50.24 | 0.24 |
5 | 1 | x | -25 | -5.5 | 19.5 | 19.79 | 0.29 |
6 | 1 | z | 8.5 | 14.5 | 6 | 6.56 | 0.56 |
7 | 1 | y | -25 | 25 | 50 | 50.24 | 0.24 |
8 | 1 | y | -25 | 25 | 50 | 50.22 | 0.22 |
9 | 1 | y | -5 | 5 | 10 | 10.32 | 0.32 |
10 | 2 | z | 0 | 19.5 | 19.5 | 19.9 | 0.40 |
11 | 2 | z | 0 | 19.5 | 19.5 | 19.86 | 0.36 |
12 | 2 | x | -25 | 25 | 50 | 50.25 | 0.25 |
13 | 2 | x | -25 | 25 | 50 | 50.29 | 0.29 |
14 | 2 | x | -25 | -5.5 | 19.5 | 19.76 | 0.26 |
15 | 2 | z | 8.5 | 14.5 | 6 | 6.45 | 0.45 |
16 | 2 | y | 80 | 30 | 50 | 50.2 | 0.20 |
17 | 2 | y | 80 | 30 | 50 | 50.2 | 0.20 |
18 | 2 | y | 50 | 60 | 10 | 10.33 | 0.33 |
19 | 3 | y | 80 | 30 | 50 | 50.16 | 0.16 |
20 | 3 | y | 60 | 50 | 10 | 10.21 | 0.21 |
21 | 3 | z | 0 | 9 | 9 | 9.14 | 0.14 |
22 | 3 | x | 45.5 | 54.5 | 9 | 9.34 | 0.34 |
23 | 3 | x | 45.5 | 54.5 | 9 | 9.42 | 0.42 |
24 | 5 | x | 30 | 80 | 50 | 50.21 | 0.21 |
25 | 5 | x | 30 | 37.5 | 7.5 | 7.54 | 0.04 |
26 | 5 | x | 72.5 | 80 | 7.5 | 7.55 | 0.05 |
27 | 5 | y | -0.5 | -9.5 | 9 | 9.28 | 0.28 |
28 | 5 | z | 0 | 4 | 4 | 4.08 | 0.08 |
29 | 7 | y | 80 | 30 | 50 | 50.15 | 0.15 |
30 | 7 | y | 49.5 | 30 | 19.5 | 19.64 | 0.14 |
31 | 7 | z | 0 | 9 | 9 | 9.32 | 0.32 |
32 | 7 | x | 44.5 | 30 | 14.5 | 14.66 | 0.16 |
33 | 9 | x | 30 | 80 | 50 | 50.09 | 0.09 |
34 | 9 | y | -10.5 | -25 | 14.5 | 14.63 | 0.13 |
35 | 9 | z | 0 | 9 | 9 | 9.36 | 0.36 |
36 | 11 | x | 85.5 | 94.5 | 9 | 9.28 | 0.28 |
37 | 11 | y | 25 | -25 | 50 | 50.21 | 0.21 |
38 | 11 | z | 0 | 9 | 9 | 9.08 | 0.08 |
39 | 12 | x | 85.5 | 94.5 | 9 | 9.3 | 0.30 |
40 | 12 | y | 80 | 30 | 50 | 50.17 | 0.17 |
41 | 12 | z | 0 | 9 | 9 | 9.16 | 0.16 |
Avg | 0.24 | ||||||
Std | 0.11 | ||||||
Min | 0.04 | ||||||
Max | 0.56 |
I also discovered that there is an extremely extensive database of mechanical puzzles assembled by Jerry Slocum known as the Slocum collection but I could not find my puzzle in the online database. Apparently a classic puzzle reference book is Prof. Hoffman's "Puzzles old and new", 1893 so it would be interesting to see if my puzzle is mentioned there but the book is hard to come by. My guess is the puzzle dates from 19th century Europe but it seems that puzzles have been very popular in Japan for a long time where the keyword is "kumiki" apparently meaning "joining wood together".