Last edited 4may05 by
Find this document at



The Quasicrystals program is based primarily on the work done in the area by Tony Robbin. A quasicrystal is a structure formed by projecting a higher-dimensional hypercube into a lower-dimensional space; in this case, one or more six-dimensional hypercubes are projected into three-dimensional space. When the slope of the three-dimensional space is given by the golden ratio, you get aperiodic crystalline patterns that are very interesting.

Program details

The program begins by creating one or more six-dimensional hypercubes. The vertices of those hypercubes are then projected onto a three-dimensional space that passes through them with a slope equal to the golden ratio. Edges are then drawn between any two vertices that are a certain distance apart (in this case, the best results are achieved with a distance of approximately 0.591 units, where the original hypercube has a length of one unit on any side). If a single hypercube is used, the result looks like this:

If multiple hypercubes are used, the resulting quasicrystal will show a larger and more detailed structure:

The program can also present the quasicrystals in binocular vision mode, for those who happen to have a pair of red-blue glasses handy for 3D viewing:


The quasicrystal program was a challenge to write, but in the end I think it was definately worth it. The math used to project from 6D to 3D was difficult, but was solved thanks to some help from Tony Robbin. Outside of that, the biggest difficulty was debugging. The program has to deal with very large vertex arrays when calculating the quasicrystal, and even a small error can lead to some very hard-to-find bugs. Optimizing the program's speed was also crucial; the first working version of the program ran at less than a frame a second. The program also chokes when trying to calculate quasicrystals from a grid of hypercubes larger than about 2x2x2x2x2x2, but this is mostly due to the fact that the time needed to create the quasicrystal increases quadratically with the number of vertices.

Future planned improvements include allowing the user to change the number of hypercubes used in real time and allowing the program to pre-compute and store certain quasicrystal configurations for later. On the advice of Tony Robbin, I also plan to rewrite a significant amount of the code over the summer to completely change the method used to generate the quasicrystals; the "dual method" is expected to produce much nicer looking structures.

I would like to thank Professor Francis for running this great class. I have learned a lot, both about math and about computer graphics, and have had a lot of fun doing it.