School of Mathematics, Tel: +44 (0) 1509 22 2861

Hyperspace structures

Hyperspace structures

How the models were produced

The models of the hypercube and hypertorus were produced with the aid of some simple Mathematica routines.

The "inflated'' hypercube was produced by a FORTRAN program.

The vertices of the 4-d objects are represented by vectors, each holding four coordinates

Rotation matrices are simple extensions of the 2-d and 3-d versions: for example, to rotate in the planes xy, and yt, we would use the matrices:
    /  Cos(theta)  -Sin(theta)  0       0       \
    |  Sin(theta)   Cos(theta)  0       0       |
    |      0             0      1       0       |
    \      0             0      0       1       /
    /      1             0      0       0       \
    |      0        Cos(theta)  0  -Sin(theta)  |
    |      0             0      1       0       |
    \      0        Sin(theta)  0   Cos(theta)  /

(These are basically just the 4x4 identity matrix, with elements that lie in the row and column corresponding to coordinates that will be altered by the rotation replaced by the elements of a 2x2 rotation matrix.)

Several techniques may be used to plot the structures. One way is to just rotate to the desired orientation and then ignore the 4-th coordinate of each vertex, giving a set of vertices in 3-d space to be joined together (this method was used for the first hypercube movies). This gives the effect of a simple orthogonal projection.

An alternative method is to choose a point in 4-space, and imagine that this is a light-source, we then take the shadow that is cast by light rays from this point to define our 3-d projection (this method was used for the spinning hypertorus). The 4-th dimension is then more apparent as extra depth appears in the image.

Ray-tracing was done using the Persistence of Vision (POV) and Rayshade packages with the edges connecting the vertices represented by cylinders, and the vertices themselves shown as spheres.

The movies were generated from the resulting still-frames using mpeg_encode.

Back to:     Gallery home    Home page