(or N-dimensional cubes)

Man has been fascinated about the possibility of there being more than three
dimensions ever since he has understood the concept. Henry More (1614-1687)
considered that spirits have four dimensions. H.G. Wells
suggested that the fourth dimension is time in *The Time
Machine*. This can be misleading
in fact since time is somewhat different from the other three dimensions as we
know them. Abbott's *Flatland* (1) is
probably nearer the mark. He considers the life of a 2-dimensional square which
suddenly has the chance to travel in three dimensions. This gives the square the
ability to see inside objects in its 2-dimensional world, something it
previously thought was impossible. Using this analogy from three to four
dimensions, we would be able to see inside solid objects if we were able to
break out of our own 3-dimensional world into the fourth dimension. Taking the
analogy further, when a 3-dimensional object crosses a 2-dimensional world its
inhabitants simply see an object appear from nowhere, grow in size, changing its
shape in a rather odd manner if the object is irregular, and then decrease in
size until it disappears again. In our world this would be the equivalent of an
object suddenly appearing somewhere, growing in size, shrinking and then
disappearing without trace. This may soung very disturbing but this is because
we do not fully understand the fourth dimension.

What is a dimension? We may define a dimension as being a direction which is
at right angles to any other dimension. In our world we simply run out of
directions after we have defined three dimensions (length, width and height for
example). However there is no reason why there should be anything special about
three dimensions apart from the fact that we live in a 3-dimensional world.
Thinking in terms of three dimensions is simply of the most practical use to us.
We are quite willing to project 3-dimensional objects into two dimensions when
we draw or photograph them. Again this because it is useful to us (e.g. an
architect's plan of a house). There is no reason why we may not project objects
of more than three dimensions. Note that in this case we also have the choice of
projecting them into three dimensions if we wish. Probably the simplest and most
interesting objects to consider for projection are *polytopes*. These are
geometrical figures bounded by portions of lines, planes or hyperplanes (for
polytopes of 2, 3 and 4 or more dimensions respectively). In two dimensions the
polytope is known as a polygon and in three dimensions it is known as a
polyhedron. For simplicity we shall restrict ourselves to regular polytopes in
which all the vertices, edges, faces, etc. are the same. In two dimensions these
consist of the equilateral triangle, square, etc. There are an infinite number
of these. In three dimensions there are only five such solids known as the
Platonic polyhedra which were discovered by the ancient Greeks. These are the
tetrahedron, cube, octahedron, dodecahedron and icosahedron. A complete
description of these and many other polyhedra may be found in *Mathematical
Models* by Cundy and Rollett (2). In
four dimensions there are six such polytopes, five of which may be considered as
the four dimensional equivalents of the Platonic polyhedra. These are described
in Coxeter's
*Regular Polytopes* (3). In
fact it turns out that the tetrahedron, cube and octahedron have similar
equivalents in any number of dimensions. A simple algorithm may be used to
generate the polytope for the next dimension up in each case (3).
These may be projected in two dimensions. The cube was chosen out of the other
two possiblities since this produces more interesting projections having square
rather than triangular sides. However the reader may be interested in
investigating the other two himself. For those interested in more complicated
polytopes, Coxeter's *Regular Complex Polytopes* (4) is
recommended.

A cube of N dimensions may be generated from a cube of (N-1) dimensions in the following manner. Take the (N-1)-dimensional cube and redraw it displaced along a new dimension by a distance equal to the length of one of its sides. Now join the corresponding vertices of each of the old cubes and the new cube is formed. This may be demonstrated by starting with a "cube" of zero dimensions. This consists of a single point as would any 0-dimensional object. Displace this point along any dimension by a given distance (say a distance L from the origin along the X-axis - see figure 1.1). We now have a line of length L (a 1-dimensional cube). Next displace this line a distance L along a new dimension (say the Y-axis) and join the corresponding ends (see figure 1.2). We have now formed a square, a 2-dimensional cube. Now along the Z-axis, join the corresponding corners and we form the standard 3-dimensional cube (see figure 1.3). If we displace the cube along a new axis (say the W-axis) and join the corresponding vertices we form what is generally known as a hyper-cube or 4-dimensional cube (see figure 1.4). We may now continue this process as many times as we wish to form a multi-dimensional cube of any given number of dimensions.

The program listed in figure 2 draws N-dimensional cubes. It was written to run on a Research Machines 380Z microcomputer with high resolution graphics but could be adapted to run on any computer with BASIC and a line plotting facility of some sort. The number of dimensions that can be plotted is limited by the resolution of the plotting device. Above about 8 dimensions the cube becomes too complex to be viewed on the Research Machines screen. Other systems may be able to plot more or less dimensions than this. Below 3 dimensions the "cube" is no longer a true cube. The program draws the cubes symmetrically so that above about 4 dimensions some very pretty and interesting patterns are produced (see figures 3.1 to 3.7).

First the desired number of dimensions is read into the variable `N`

in line 170.
Lines 260
to 400
initialise the arrays `X1`

and
`Y1`

. These contain the coordinate offsets necessary to plot
each possible direction of the cube's sides. Lines 410
to 520
calculate the origin coordinates (`X0`

,`Y0`

) and
the size factor (`F`

).
Line 530
positions the origin. The `FOR`

loop from lines 540
to 830
calculates the start and finish positions of each edge of the cube and draws a
line between them. Arrays `I1`

and
`I2`

contain flags (with values of 0 or 1) which are used to
indicate which coordinate offsets are to be used for the beginning and end
coordinates of each edge plotted. Lines 610
to 660
calculate the starting position and line 670
positions the current coordinates at that position. Lines 680
to 730
calculate the end position and line 740
draws a line to that position. Finally the program loops back to line 90,
displays the number of dimensions of the cube (line 140) and prompts the user for a new value of `N`

. The
program may then be rerun if desired or terminated by typing a carriage return
on a blank line.

The following lines contain special calls and commands to control graphics on the Research Machines 380Z and will need to be changed for other systems:

- Line 90
puts the Research Machines 380Z into graphics mode in which only the last four
lines are used to display text and the rest of the screen is used for
plotting. Line 180 sets the resolution and clears the screen. Line 230 resets the Research Machines screen to normal mode.
Line 530 sets the position of the origin on the screen. For other
systems the values of
`X0`

,`Y0`

and F (the coordinates of the new origin and the size factor) will probably need to be adjusted (i.e. lines 410 to 520 will have to be changed as necessary). Line 670 moves the current position to the coordinates (`X`

,`Y`

). (In fact it also draws a point at that position but this is not necessary for the program to work.) Line 740 draws a line from the current position to a new position at coordinates (`X`

,`Y`

). - In line 260 the value of
*pi*is specified (3.14159). This may be given to more or less decimal places depending on the accuracy of your BASIC or alternatively may be calculated using the expression`4.0*ATN(1.0)`

. Apart from the points noted above the program is written in "standard" BASIC and there should be few problems transfering the program to another computer with the necessary hardware and software graphics capabilities.

- gopher://wiretap.spies.com/00//Library/Classic/flatland.txt
*Flatland*, E.A. Abbott (6th ed., Blackwell 1950) - http://www.amazon.com/exec/obidos/ISBN=0198325045
*Mathematical Models*, H.M. Cundy & A.P. Rollett (2nd ed., O.U.P. 1961) - http://www.amazon.com/exec/obidos/ISBN=0486614808
*Regular Polytopes*, H.S.M. Coxeter (2nd ed., Macmillan 1963) - http://www.amazon.com/exec/obidos/ISBN=0521394902
*Regular Complex Polytopes*, H.S.M. Coxeter (C.U.P. 1974)

**Figure 1.1***Generation of a 1-dimensional cube (a line)***Figure 1.2***Generation of a**2-dimensional cube**(a square)***Figure 1.3***Generation of a**3-dimensional cube**(a normal cube)***Figure 1.4***Generation of a**4-dimensional cube**(a hyper-cube)***Figure 2***Program Listing***Figure 3.1***Plot of a**3-dimensional cube***Figure 3.2***Plot of a**4-dimensional cube***Figure 3.3***Plot of a**5-dimensional cube***Figure 3.4***Plot of a**6-dimensional cube***Figure 3.5***Plot of a**7-dimensional cube***Figure 3.6***Plot of a**8-dimensional cube***Figure 3.7***Plot of a**9-dimensional cube***Figure 3.8***Plot of a**10-dimensional cube***Figure 3.9***Plot of a**11-dimensional cube***Figure 3.10***Plot of a**12-dimensional cube***Figure 3.11***Plot of a**13-dimensional cube***Figure 3.12***Plot of a**14-dimensional cube***Figure 3.13***Plot of a**15-dimensional cube*

**Acknowledgement:**
The above plots were generated using a Java program
which is accessible on-line, written by Andy
Wallace.

Z W . . . . . . . . . . . .. .__________. . . . X . . . . . . Y

Z W . . . . . . . . . . . .. .__________. . . . X / / / / / / /__________/ . . Y

Z W . . . . .__________ . /| /| . / | / | / | / | /__________/ | | .| | | | |______|___| . . . X | / | / | / | / |/ |/ |__________| . . Y

Z . W . . __________ . /|\ . /|\ ./ | \ . / | \ /. | \ . / | \ /__________/ | \ |\ | \_|\_______\ | \ |____/||_\_| /| | \/\ / || \ \ / | | /\ \/ || / \ \/ | | / \/_________\/\ | |/____|___|| | \ | \ | \|_\____|__\| . . . X \ | / \ | / \ | / \ | / \ |/ \ |/ \|_________\| . . Y

`10 REM`

N-dimensional cube program to20 REMrun on Research Machines 380Z30 REMwith high resolution graphics.40 REMWritten byJonathan Bowen`,`

`50 REM`

Imperial College`, London SW7 2AZ.`

`60 REM`

140Date 22-Oct-8170 REMCOPYRIGHT (C) 1981 J.P.BOWEN80 DIM X1(10),Y1(10),I1(10),I2(10) 90 GRAPH 1 100 PRINT 110 IF N>0 THEN`120 PRINT "N-dimensional cube program" 130`

GOTO 150`140 PRINT TAB(8);N;"dimensional cube" 150 PRINT 160 PRINT 170 INPUT "Enter no of dimensions (2-10)";N 180 CALL "RESOLUTION",0,1 190 IF N>1 THEN`

250`200 PRINT 210 PRINT 220 PRINT "End of cube program" 230 GRAPH 0 240 END 250 IF N>10 THEN`

170`260 P=3.14159/N 270 I=-1 280`

FOR J=1 TO N STEP 2`290 I=I+1 300 C=I*P 310 X1(J)=COS(C) 320 Y1(J)=SIN(C) 330`

NEXT J`340 I=N 350`

FOR J=2 TO N STEP 2`360 I=I-1 370 C=I*P 380 X1(J)=COS(C) 390 Y1(J)=SIN(C) 400`

NEXT J`410 F=0 420`

FOR J=1 TO N`430 F=F+Y1(J) 440`

NEXT J`450 X0=0 460`

FOR J=1 TO N`470 IF X1(J)<0 THEN`

http://www.cs.reading.ac.uk/people/jpb/publications/ndcubes.html#Line-`X0=X0+X1(J) 480 I1(J)=0 490`

NEXT J`500 F=190/F 510 X0=X0-40/F 520 Y0=0 530 CALL "OFFSET",X0*F,Y0*F 540`

FOR I=1 TO 2^N-1`550`

FOR J=1 TO N`560 I2(J)=I1(J) 570`

NEXT J`580`

FOR J=1 TO N`590 IF I1(J)=1 THEN`

760`600 I2(J)=1 610 X=0 620 Y=0 630`

FOR K=1 TO N`640 X=X+I1(K)*X1(K) 650 Y=Y+I1(K)*Y1(K) 660`

NEXT K`670 CALL "PLOT",X*F,Y*F 680 X=0 690 Y=0 700`

FOR K=1 TO N`710 X=X+I2(K)*X1(K) 720 Y=Y+I2(K)*Y1(K) 730`

NEXT K`740 CALL "LINE",X*F,Y*F 750 I2(J)=0 760`

NEXT J`770 J=1 780 IF I1(J)=0 THEN`

820`790 I1(J)=0 800 J=J+1 810`

GOTO 780`820 I1(J)=1 830`

NEXT I`840`

GOTO 90

Originally published as "*Hypercubes*" in *Practical
Computing*, **5**(4), pp 97-99, April 1982.

See also:

- Hypercube Java applets:
- N-dimensional cube based on the code above by Andy Wallace. Stereoscopic animated hypercube by Mark Newbold. See also Hyperspace Polytope Slicer.
- Hyperspace simulation with arbitrary number of dimensions.

- Hypercube images, including a slide show, generated from above Java program.
- 3-D image archive.
- The fourth dimension from the Fantasmagoric Museum.
- Viewing an n-dimensional hypercube.
- Exercise: Meditation of the HyperCube.
- Hypercube Algorithms.
- Hypercube, Inc., USA.
- Hypercubes
from the Geometry Center, University of Minnesota, USA. See:
- Viewing Four-dimensional Objects In Three Dimensions by Bob Hesse.
- How to Fill
*n*-Dimensional Space with Hoops by Evelyn Sander.

- The hypercube game.
- CoSy logo (6 dimensional hypercube), including a 1979 paper on using APL to produce hypercubes.
- Hypercube links from Google.
- Hypercube links from Infoseek.