> 4D Blocks

> Version 6

  Block Motion
> Examples
  Scene Language
  Kinds of Blocks

  Geometry Examples
  More Geometry Examples
  Geometry Examples #3
  Train Examples
  Elevated Train Examples
  Round Platform Examples
  Scenery Examples
  Toys and Puzzles
> Contributed Examples
  Polytope Library
  Shape Reference

Contributed Examples

The "contrib" directory contains scene files that have been contributed to the 4D Blocks project by other people.

2013-11-29 campfire1, 2013-12-05 3-Sphere2

Ben Blohowiak made these two files. I liked them a lot and he kindly agreed to contribute them.

Before I talk about the files, I'd like to acknowledge Ben's other contributions to the Blocks project.

  • He was the catalyst for the whole thing! See History.
  • He was the catalyst for fisheye mode and also thought up some of the options that it has. See Controls.
  • The ideas of navigation markers and four-dimensional architecture originated in discussions we had. See "geom-nav" in Geometry Examples and "geom2-house" in More Geometry Examples.

So, thanks a bunch, Ben!

Now, about the campfire example, I just like to fly underneath and look up at the flames and sparks. The official name is the Monument to Sempiternal Creation.

It thus seems fitting to have monuments in fourspace that have an empyrean character, simultaneously turning minds toward the nurturance of impermanent entities as well as the phoenix blaze of each passing moment's self-renewal.

The 3-sphere example is a great addition because it shows a real 3-sphere rather than a squared-off object like the ones I put together. I particularly like the view from the center. If you look toward either of the poles (white), you can see six lines radiating out along the axes (green, yellow, and red) and eight lines radiating out along the corner diagonals; and if you turn to follow any of the lines, you end up at the other pole.

The 3D analogy is helpful here. If you were at the center of a regular sphere, you could draw four lines along the axes and four lines along the diagonals to slice the sphere into eight pieces like the segments of an orange. Similarly, in 4D, if you visualize the twelve edge diagonals and connect them to the adjacent axes and corner diagonals with planes, you can slice the 3-sphere into 48 pieces.

You can also imagine yourself inside a 3-sphere in any 4D scene that has a sky. Think of the sun as a pole, and see how lines radiate outward from it in the six axial directions, among others. See Scenery Examples for details.


In my opinion, most of the credit for these examples goes to H. S. Teoh, creator of a beautiful and amazing web site about four-dimensional objects (here), who provided the raw data. He did tell me the whole story, however.

The vertex coordinates are not my work; I got them out of H. S. M. Coxeter's excellent book Regular Polytopes. Technically speaking, the face lattice representation that I sent Ben isn't fully my own work either, it was created by a program I wrote that runs a convex hull algorithm on the vertices and implements Kaibel et al (2002)'s algorithm for enumerating the face lattice given the vertex-facet incidence matrix (which is part of the output of the convex hull algorithm). So credits should also go to Coxeter, Komei Fukuda (for the convex hull algorithm in cddlib, used by the program), and Kaibel et al.

Thanks also to Ben for making it happen! I even did a little work myself, converting between file formats and coloring the faces.

Speaking of Regular Polytopes, I can confirm that it's an excellent book. The vertex coordinates for the regular dodecahedron in library2 came from there too. And, speaking of library files, the 120-cell definition is actually stored in library6, not in the "contrib" directory, so that you can save games containing 120-cells in an efficient way.

What about the 120-cell itself? I definitely can't do better than this explanation: The 120-Cell.

As far as the game is concerned, I can recommend that you use either texture 8 to see the individual dodecahedra clearly or texture 0 to reduce the line count. Also, if you're going to be picking up and turning the 120-cell, you might want to increase the rotate time (on the Motion tab) so that it doesn't turn as fast.

I can also explain the colors I used in the examples. In the base example "base", the whole 120-cell is green. In the other two examples, I've colored 50 of the 120 faces: the two poles (white) and the twelve bands of four faces each that connect them. The remaining 70 faces are gray.

In "lat" the bands are colored according to latitude. The colors aren't exactly the same as in Teoh's explanation, however. Here's how they correspond.

polesbluewhite / white
arcticgreengreen / red
mid-latitudeorangeorange / yellow
low-latitudemagentamagenta / cyan

Because the game uses perspective projection rather than parallel projection, from the start position you can only see the north pole and the arctic faces. You can make the mid- and low-latitude faces appear by backing up, but by the time they appear, they're too far away to make out any real detail. Another option is to slide around and look at them a few at a time.

The orange and yellow mid-latitude faces aren't part of the twelve bands, so according to what I said above they ought to be gray. But they're not! In this example, only the 30 equatorial faces are gray. However, if you're using texture 0 you won't see much orange or yellow, because I gave those colors lowest priority in order to emphasize the band structure.

In "long" the bands are colored according to longitude. In other words, the four faces in each band all have the same color. However, there were only six colors I wanted to use, so I colored the bands in pairs. As a result, instead of twelve bands of four faces each, there are six rings of ten faces each that intersect at the poles!

Of course there's nothing special about the poles; every face is associated with six rings. Since every ring is associated with ten faces, there are 120 x 6 / 10 = 72 rings in all. (This sort of math always confuses me. The easy way to remember it is, there are 120 x 6 = 720 face-ring associations.) I read on Wikipedia that it's possible to find sets of 12 rings that cover the 120-cell in a discrete version of the Hopf fibration.

I think "long" is the easiest example to make sense of, especially if you switch to texture 8.

Here's one more perspective on "lat" and "long". Suppose we put the faces of the bands into a table with twelve columns and four rows. When we pair the bands up, that gives us a new table with six columns and four rows. In "lat" we color the rows of that table, while in "long" we color the columns.