Recursively Interlocking Puzzles
PuzLok is a software system that is used to generate puzzles that use 3 dimensions to ensure that its component pieces are interlocked. Recursive interlocking is a property of interlocking puzzle pieces that enables them to form a puzzle such that the last piece inserted into the puzzle is always the first one that can be taken out and ensures that all other puzzle pieces are immobilized
While an implementation of this already exists, the algorithm that creates pieces is slow; so, we propose a solution to this. Our plan is to implement a program that does the following: 1) takes a triangulated object mesh as input. 2) Voxelizes the input object (converts into a voxel representation). 3) Generates voxelized interlocking puzzle pieces using an algorithm. 4) Triangulates the puzzle pieces using the software. 5) Add a triangulated outer surface. 6) Creates a file suitable to send to a 3D printer for 3D printing.
In this paper, we detail the development process involved in generating computational 3D models and 3D printing them. This process involves merging, shrinking, and rendering mesh models, flowing through the system as either a triangle mesh model or a voxelized grid, depending on the type of functionality invoked. We also observe how merging and shrinking mesh models is necessary for 3D printed models to interconnect without locking together due to the compactness of the printing material.
This paper focuses on a technique for generating 3D (three-dimensional) interlocking puzzles. The technique is adapted from a research paper published in 2012 entitled ‘Recursively Interlocking Puzzles’ which contains a 3D puzzle piece generating algorithm written by Peng Song, Chi-Wing Fu and Daniel Cohen-Or. Together, they solved the mystery of the governing mechanics behind recursively interlocking puzzles. Their algorithm follows a top-down constructive approach which offers a much-needed speedup over pre-existing exhaustive search approaches. Such 3D puzzles have a large number of (potential) applications. For example, they can be used to create games and furniture which can be assembled and/or disassembled. This paper focuses specifically on the application of 3D interlocking puzzles to the fast-growing field of 3D printing.
Rendering and 3D printing:
Algorithm design. Each of the algoritms highlighted above are well designed and perform as intended. Algorithm 1 is designed to
iteratively merge new cubes to an accumulating mesh composed of
previously-rendered cubes. The algorithm takes into account that a
new cube will have to merge with at least one other cube in the
accumulating mesh and, therefore, adjoining triangles have to be
rremoved and duplicate vertices must be removed. Algorithm 2 is
designed to iteratively translate each of the vertices of the
accumulating mesh. The algorithm covers the whole process from
identifying surrounding triangles, to normalizing, snapping, and
finally translating the vertex.
Implementation. The implementation of each algorithm is
relatively straightforward. The difficulty lies in checking for
accuracy in each of the intermediary phases of the implementation
of each functionality. The primary method of testing is tracing,
which involves standard output error printing of the relevant
information required for verifying the accuracy of a particular
process. This method is coupled with a paper-written set of tests
used to visually confirm the tracing outputs.
Generating 3D interlocking puzzle pieces from 3D arrays
Interlocking puzzles are a largely unexplored topic with many
possible applications. This paper describes the coding process
undertaken to derive 3D interlocking puzzles using 3D arrays as
the primary data structure. It helps bridge the gap between a
high-level and lower-level algorithm which is easier to understand
from a programming perspective. The Song et al. technique of
generating recursively interlocking puzzles is fairly complex
and requires a lot of explanation. One cannot understand it by
simply reading their paper once or twice. Although we failed to
generate a set of valid key and secondary puzzle pieces, we are
well aware of the errors we made in understanding and implementing
their technique. The lack of time was the main drawback.
The primary objective of 3D printing valid puzzle pieces can still
be accomplished by hard-coding puzzle pieces in 3D arrays. The IO
class would assist us in using these 3D arrays to generate files which
are served as input to the renderer for post-processing. Going
forward, we aim to improve the accuracy of the implementation
described in section 5 of this paper. Once this implementation yields
valid sets of key and secondary puzzle pieces, one may focus on the
efficiency aspect. The efficiency aspect requires that one should
accomplish speedup over the original algorithm. We hope this paper
inspires more insight into the topic of recursively interlocking 3D
puzzles. May we continue to “do the other things, not because they
are easy, but because they are hard”. May we continue to recursively
unlock a future of possibilities.