Constructing a Buckyball with Mathematica

A combination of geometry and algebra from classical and modern mathematics

Michael Trott

Using Standard Mathematica Packages

Length[ball]

Show[Graphics3D[ball]]

\(Show[
      Graphics3D[
        {
{SurfaceColor[Hue[0.04]], 
            Select[ball, Length[First[#]] == 5 &]}, 
			{SurfaceColor[
              Hue[0.22]], Select[ball, Length[First[#]] == 6 &]}}]]\)

Construction from First Principles

Instead of using existing polyhedron definitions from standard Mathematica packages, we can use basic algebra operations in Mathematica to construct a buckyball from first principles. One advantage of this is  that we can get all the coordinates in the buckyball exactly, rather than as  numerical approximations.

We start with the construction of an icosahedron. The vertices of an  icosahedron centered at the origin are given by the vertices of three  mutually perpendicular rectangles with aspect ratio equal to GoldenRatio.  Here this construction.

\(Show[
      Graphics3D[
        {Polygon /@ 
            {{{1, ϕ, 0}, {\(-1\), ϕ, 0}, {\(-1\), \(-ϕ\), 0}, 
                {1, \(-ϕ\), 0}}, 
              {{ϕ, 0, 1}, {\(-ϕ\), 0, 1}, {\(-ϕ\), 0, \(-1\)}, 
                {ϕ, 0, \(-1\)}}, 
              {{0, 1, ϕ}, {0, 1, \(-ϕ\)}, {0, \(-1\), \(-ϕ\)}, 
                {0, \(-1\), ϕ}}}, 
Hue[0], 
          Line /@ {{{1, ϕ, 0}, {\(-1\), ϕ, 0}}, 
              {{1, ϕ, 0}, {ϕ, 0, 1}}, 
              {{1, ϕ, 0}, {ϕ, 0, \(-1\)}}, 
              {{1, ϕ, 0}, {0, 1, ϕ}}, 
              {{1, ϕ, 0}, {0, 1, \(-ϕ\)}}, 
              {{\(-1\), ϕ, 0}, {\(-ϕ\), 0, 1}}, 
              {{\(-1\), ϕ, 0}, {\(-ϕ\), 0, \(-1\)}}, 
              {{\(-1\), ϕ, 0}, {0, 1, ϕ}}, 
              {{\(-1\), ϕ, 0}, {0, 1, \(-ϕ\)}}, 
              {{\(-1\), \(-ϕ\), 0}, {1, \(-ϕ\), 0}}, 
              {{\(-1\), \(-ϕ\), 0}, {\(-ϕ\), 0, 1}}, 
              {{\(-1\), \(-ϕ\), 0}, {\(-ϕ\), 0, \(-1\)}}, 
              {{\(-1\), \(-ϕ\), 0}, {0, \(-1\), \(-ϕ\)}}, 
              {{\(-1\), \(-ϕ\), 0}, {0, \(-1\), ϕ}}, 
              {{1, \(-ϕ\), 0}, {ϕ, 0, 1}}, 
              {{1, \(-ϕ\), 0}, {ϕ, 0, \(-1\)}}, 
              {{1, \(-ϕ\), 0}, {0, \(-1\), \(-ϕ\)}}, 
              {{1, \(-ϕ\), 0}, {0, \(-1\), ϕ}}, 
              {{ϕ, 0, 1}, {ϕ, 0, \(-1\)}}, 
              {{ϕ, 0, 1}, {0, 1, ϕ}}, 
              {{ϕ, 0, 1}, {0, \(-1\), ϕ}}, 
              {{\(-ϕ\), 0, 1}, {\(-ϕ\), 0, \(-1\)}}, 
              {{\(-ϕ\), 0, 1}, {0, 1, ϕ}}, 
              {{\(-ϕ\), 0, 1}, {0, \(-1\), ϕ}}, 
              {{\(-ϕ\), 0, \(-1\)}, {0, 1, \(-ϕ\)}}, 
              {{\(-ϕ\), 0, \(-1\)}, {0, \(-1\), \(-ϕ\)}}, 
              {{ϕ, 0, \(-1\)}, {0, 1, \(-ϕ\)}}, 
              {{ϕ, 0, \(-1\)}, {0, \(-1\), \(-ϕ\)}}, 
              {{0, 1, ϕ}, {0, \(-1\), ϕ}}, 
              {{0, 1, \(-ϕ\)}, {0, \(-1\), \(-ϕ\)}}}}]]\)

These are the 12 vertices of the icosahedron.

Let us construct the edges of an icosahedron next. This finds exact  expressions for all the distances between pairs of vertices.

distances = 
      Union[RootReduce[(Sqrt[# . #])] & /@ 
          ((First[vertices] - #) & /@ Rest[vertices])]

Here are numerical approximations.

N[%]

The edges of the icosahedron are formed by all pairs of vertices with distance 2.

The icosahedron has 30 edges.

Length[edges]

We obtain the 20 faces of the icosahedron by choosing all triples of edges that have exactly three points in common.

Length[faces]

Now we can construct the buckyball.

We obtain the hexagonal faces by truncating the vertices of the 20  triangular faces. The function TruncatePolygon truncates a polygon by the factor f.

The pentagonal faces are obtained by first constructing the pentagonal  pyramid formed at any vertex (this is done by the function VertexCone) and then truncating this pyramid (this is done by the function TruncateCone) so that a pentagonal face results.

So we have finally the following list of polygons (both hexagons and pentagons) that make up the buckyball.

Here is a picture of the resulting object.

Show[Graphics3D[Buckyball], Axes -> True]

Here are the final expressions for the polygons that make up a buckyball (with ϕ being used in the output to denote GoldenRatio).

Buckyball /. 
        GoldenRatio -> InterpretationBox["ϕ", ϕ] // 
      DisplayForm

Computing Volume and Area

Having derived exact formulas for the coordinates of the vertices of a buckyball, we can now do exact computations of such quantities as the volume and surface area of the object.

Volume

\(RootReduce[
      \(1\/3\) \((Length[
                Buckyball[[1]]]\ Length[
                hexagon]\ Apply[Times, PyramidTriple[hexagon]] 
            + 
		Length[
                Buckyball[[2]]]\ Length[
                pentagon]\ Apply[Times, PyramidTriple[pentagon]])\)]\)

N[%]

\(ToRadicals[
      RootReduce[
        %%\/Norm[hexagon[[1]]]\^3]]\)

N[%/((4 π)/3)]

Surface Area

\(ToRadicals[
      RootReduce[
        Length[Buckyball[[1]]]\ Length[
              hexagon]\ Apply[Times, Take[PyramidTriple[hexagon], 2]] 
          + 
	\ Length[
              Buckyball[[2]]]\ Length[
              pentagon]\ \ Apply[Times, Take[PyramidTriple[pentagon], 2]]]]
      \)

\(ToRadicals[
      RootReduce[
        %\/Norm[hexagon[[1]]]\^2]]\)

N[%/(4 π)]