This is documentation for Mathematica 4, which was
based on an earlier version of the Wolfram Language.
View current documentation (Version 11.2)

 Documentation /  Mathematica /  Der Einstieg/Demos /  Demos /

Computer ArtFormatting Sampler

The Cover Image

Making the perforated hyperbolic dodecahedron symbolizing Mathematica 4

Michael Trott

Copyright Michael Trott 1998

Outline of the Procedure

Step 1:

We start by building a regular dodecahedron with its center at the origin and with each vertex a unit distance from the origin.

Step 2:

The faces of the dodecahedron are then subdivided into right triangles, each of which is then scaled down a bit so that gaps are introduced between them.

Step 3:

Each triangle is further subdivided so that, when the surfaces are transformed in the next step, the surfaces which result will remain comparatively smooth.

Step 4:

All coordinates are transformed by , where the function maps each distance from the origin onto a new distance. In particular, moves the center of each face of the dodecahedron toward the origin but moves the vertices further away, up to a fixed maximum distance. Since is scalar, this transformation does not change the direction between the origin and each point, just the distance; we'll call it the radial transformation.

Step 5:

Each triangle is given depth by connecting it to a slightly smaller copy moved closer to the origin.

Step 6:

The faces of the resulting body are assigned colors.

Step 1: The Regular Dodecahedron

First we load the standard Mathematica package giving the properties of the Platonic solids.

Here is our starting point, the regular dodecahedron.

Step 2: Dividing into Triangles

SolidToTriangles is a function which breaks the faces of a Platonic solid into right triangles.

Applied to the dodecahedron, here is the result.

Triangulate divides a right triangle into smaller right triangles.

This shows the result with .

ShrinkTriangles scales each triangle toward its center of gravity—that is, toward the average of its vertices—by a given factor. A scaling factor of 1 means no change; a factor of halves the size.

Shrinking the triangles by a factor 0.8 gives us this:

Step 3: Subdividing the Triangles

Subdivide subdivides any triangle—not just right triangles—into smaller triangles.



For example, we can extract the list of triangles making one face of the dodecahedron.

Here is the face after subdividing each triangle into smaller triangles.

SubdivideEdges takes the edges of the larger triangles—the ones produced in step 2—and subdivides them.

In this diagram the points of subdivision are marked.

Steps 4 and 5: Radial Transformation and Thickening

The next task is to create a function for calculating the radial transformation.

As the following plot shows, this function has one of three different behaviors, depending on the initial distance of a point from the origin. For points nearest the origin, the transformation draws them closer still. All points beyond a certain distance from the origin are moved to a fixed limit. And points between these two ranges are moved away from the origin.

Each polygon has zero thickness, so the ThickenTransform builds solid 3D shapes by matching each polygon with a slightly offset, slightly smaller copy of itself, and then joining the corresponding edges with new polygons.

Here is the result of radial transformation and thickening.

And here is a cross-section through the resulting surface.

Final Assembly and Coloring the Faces Individually

Incorporating the individual functions defined above leads us directly to the function CoverImage.

This example generates a slightly simplified version of the final cover image.

CoverImage[Dodecahedron,{3,4,0.96,.85},0.6,0.955];

By taking out one of the faces, you can have a look inside the previous example.

Here is the actual input used for the cover image. Since the faces of the dodecahedron have been divided into a great many polygons, the calculation of the graphic may be beyond the memory capacity of your computer.

Some Variants

The above implementation can be used with other Platonic solids, radial transformations, and coloring schemes.

Here is a cube (hexahedron) with its vertices pushed far outwards and without a fixed outer limit. Each face is assigned a randomly chosen color.

Here is a view into the last example.

Here is an icosahedron.

Here is a tetrahedron, with all faces given the same color.

The last example can be rotated and stretched.

Computer ArtFormatting Sampler