Gordian's Knot
Gordian's Knot is an interlocking puzzle. The puzzle consists of six colored
pieces, the bounding boxes of which are identical. The objective is to take
the puzzle apart applying a sequence of steps. Each step moves (transforms)
a subset of the six pieces.
Approximately 70 translational moves are required to disassemble the puzzle.
You can view the knot 3D-model with an interactive
program called player. The program parses files in an extended VRML
format, displays the model, and interacts with the user. Download the program
here.
Once the files are downloaded, obtain the executable from the
compressed file, and on the command line type:
to run the program and interact with the 3D model.
Regarding the project, you are required to solve the Gordian's Knot
interlocking puzzle. That is, write a program that results with a sequence
of steps that takes the puzzle apart. Each step transforms a subset of the
six pieces. Start with the exact configuration as in the figure above. It
is possible to disassemble the puzzle using only translational moves.
However, you may try to find a shorter sequence that contains also
rotational moves. Make your program as efficient as possible in terms of
run time and memory space, and try to come up with the shortest sequence.
You may design your own way to represent a step. However, you will need
to convert the steps in the sequence into VRML statements that simulate
the disassebly. For example, if you append the VRML statements below to
the end of the file knot and run the player
providing this file as input, the orange piece will smoothly translate
one unit along the positive x-axis one second after the program is launched.
You will need to introduce as many TimeSensors and Interpolators as steps.
Good Luck.
DEF TIME1 TimeSensor {
cycleInterval 1
startTime 1
}
DEF POSITION1 PositionInterpolator {
key [ 0.0, 1.0 ]
keyValue [ 7 8 9, 8 8 9 ]
}
ROUTE TIME1.fraction_changed TO POSITION1.set_fraction
ROUTE POSITION1.value_changed TO ORANGE_TRANS.set_translation
|
If you are interested in the source code and would like to compile it
yourself, contact me.
Components
Yellow |
|
|
|
Orange |
|
|
|
Green |
|
|
|
Red |
|
|
|
Blue |
|
|
|
Purple |
|
|
|