Find this document at http://cheer.math.edu/reulab/web/ehofrei2

The purpose of this project is to generate regular convex polytopes, displaying their projection into 3-space and allowing rotation across any plane orthogonal to the Cartesian coordinate axes. The polytopes are rendered in the OpenGL/GLUT environment, and they are displayed a solid wireframe with simple lighting to aid viewing. The Schlafli symbol is also displayed as a demonstration of its relationship to the polytope being rendered. As of 4 May 2008, only the three universal regular convex polytopes (the hypercube, simplex, and cross-polytope) can be rendered, and only in 3 to 5 dimensions. However, with a simple modification to the source and a recompile, any dimension greater than 5 can also be generated and rendered, limited only by the capabilities of the machine on which it is running.

This project was actually conceived one year prior to taking the Math 198 course. At that time, the goal was to generate a regular convex polytope on the fly given *any* valid Schlafli symbol. Unfortunately, this proved to be a task much more daunting than initially expected, and so was abandoned. What remained, however, was a framework for rendering the 3-space projections of polytopes in any dimension, and this framework formed the basis for illiTopes.

Polytope generation based solely on the Schlafli symbol has been abandoned in favor of specific algorithms for each class of polytope. This approach, while less satisfying, is actually feasible within the allotted time and still accomplishes the goal of viewing high-dimensional regular polytopes.

Generation of the remaining 5 polytopes in 3 and 4 dimensions has been abandoned in favor of correcting rendering errors with the current set of polytopes. This current set of polytopes is much more interesting than the remaining 5, so this sacrifice is justified.

Most of us are only familiar with visualizing spaces of 3 dimensions or fewer. This is primarily a biological limitation; our retinas are only 2-dimensional, and our brains are wired to naturally infer a 3rd spatial dimension when applicable. Despite this biological limitation, it is possible to comprehend spaces of higher dimension than 3. While this may seem pointless, consider the idea that a dimension need not necessarily be a physical spatial dimension describing translational position in space. A dimension is simply a parameter, and problems with more than 3 parameters abound in everyday life. Consider the simple example of a person's (simplified) medical record. It holds the following pieces of information: age, weight, height, blood pressure, and bone density. This very simple medical record holds 5 independent pieces of information, and so can be considered a 5-dimensional object. Objects of dimensions greater than 3 are quite common, and therefore developing an intuitive grasp of them is beneficial to anyone.

Understanding higher dimensions is best done by analogy. A line, which is a 1-dimensional object, is bounded by two points, which are 0-dimensional objects. Most people are familiar with polygons (such as a square), which are 2-dimensional figures bounded by 1-dimensional lines. Also familiar are polyhedra (such as a cube), which are 3-dimensional figures bounded by 2-dimensional polygons. A pattern appears to be emerging. One could suppose that an n-dimensional figure must be bounded by (n-1)-dimensional figures, and indeed this supposition is correct. These n-dimensional figures are in general known as polytopes, and they are consequently the focus the of illiTopes. More specifically, the focus is regular polytopes. The idea of regularity in higher dimensions is also best understood by analogy. A regular polygon is a polygon in which all bounding lines and internal angles are congruent. Likewise, a regular polyhedron is a polyhedron in which all bounding polygons and and vertex figures are congruent and regular. From this it can be inferred that an n-dimensional regular polytope is a polytope in which all of its bounding polytopes (of (n-1) dimensions) and vertex figures (also of (n-1) dimensions) are regular and congruent. An explanation of vertex figures can be found here.

Developed by Swiss mathematician Ludwig Schlafli (who also discovered the regular polytopes in higher dimensions) in the 19th century, the Schlafli symbol is a compact notation that describes regular polytopes and tessellations. For the purposes of illiTopes, which deals only with regular convex polytopes, a valid Schlafli symbol for an n-dimensional polytope has the form {p_{1}, p_{2}, ... p_{n-1}}, where each p_{i} is a positive integer. The simplest Schlafli symbol is that for a 2-dimensional polytope with p sides, {p}. A 3-polytope has the Schlafli symbol {p, q}, where {p} defines the faces and {q} defines the vertex figures. A cube, therefore, has the Schlafli symbol {4, 3}, since it has square ({4}) faces and triangular ({3}) vertex figures. A 4-polytope has the Schlafli symbol {p, q, r}, where {p, q} defines its bounding 3-polytopes (cells) and {q, r} defines its vertex figures. In general, for an n-polytope with Schlafli symbol {p_{1}, p_{2}, ... p_{n-1}}, the bounding (n-1)-polytopes (sometimes called *facets*) are defined by {p_{1}, p_{2}, ... p_{n-2}}, and its vertex figures are defined by {p_{2}, p_{3}, ... p_{n-1}}. The Schlafli symbol therefore provides a convenient description of regular polytopes that scales very nicely to any dimension.

It is easy to see that there are infinitely many regular polygons, or 2-polytopes. But this is in fact a special case, as the number of n-polytopes for n greater than 2 is quite small. In 3 dimensions, there are only five regular polytopes, known as the Platonic Solids. They are the tetrahedron {3, 3}, hexahedron (cube) {4, 3}, octohedron {3, 4}, dodecahedron {5, 3}, and icosahedron {3, 5}. In 4 dimensions, there are six regular polytopes, defined by {3, 3, 3}, {4, 3, 3}, {3, 3, 4}, {3, 4, 3}, {5, 3, 3}, and {3, 3, 5}. In 5 and higher dimensions, only three regular polytopes exist, known as the simplex {3, 3, ... 3}, the hypercube {4, 3, ... 3}, and the cross-polytope (orthoplex) {3, ... 3, 4}. These three classes of polytopes, the simplex, hypercube, and cross-polytope, are the most interesting, since they scale to any dimension. Viewing these figures in lower dimensions provides insight into their higher-dimensional analogues, and likewise insight into higher-dimensional spaces. illiTopes aims to facilitate this process by providing a convenient and intuitive environment for viewing and manipulating these three classes of regular polytopes in dimensions of 3 or greater. The other five polytopes in 3 and 4 dimensions (dodecahedron, icosahedron, {5, 3, 3}, {3, 3, 5}, and {3, 4, 3}) are interesting in their own right, but not particularly conducive to the goals of illiTopes.

The goal of this project has been satisified, but could certainly be improved. Producing the remaining five polytopes would be a start, but generating them algorithmically is quite challenging. Generating all the vertices adjacent to one vertex in such a polytope is feasible, but performing the same operation recursively on these newly generated vertices would create duplicate vertices, which would then have to be removed. This process would have to be repeated numerous times until all vertices were generated, which would be very inefficient and cumbersome. A perhaps simpler method would be to calculate by hand all the possible vertices in Cartesian coordinates, hard code them into the program, and connect them in such a way as to produce the correct polytope.

An additional feature that was never added is sub-polytope highlighting. Being able to highlight one of the lower-dimensional sub-polytopes of a given polytope would certainly provide greater insight into its makeup. However, this would require the shapes of all sub-polytopes to be preserved when generating a given polytope, which is not currently done. This problem is significantly more difficult than generating all the vertices of a polytope and connecting them. The algorithms (and most likely data structures) used to handle polytopes would need to be completely revamped, but should still take the recursive form present in existing code.

Weisstein, Eric W. "Polytope." From MathWorld--A Wolfram Web Resource. http://mathworld.wolfram.com/Polytope.html