Figure 1. A blue icosahedron.

Allan Roberts

To construct an icosahedron, I began with the following premises: all edges have the same length, all faces are triangles, and five faces meet at every vertex. I then calculated the coordinates for twelve vertices equidistant from the origin. The script given below will produce an image like Figure 1. For brevity, I have simply given the vertex coordinates and shades of the faces rather than providing the underlying calculations. Do the x, y and z coordinates provided indeed describe an approximate icosahedron? If you want to, you can verify this by computing the distances between points.

**R Script**

#Blue planet icosahedron.

#Script written by Allan Roberts, April 2013.

X = c(1, 0.309, -0.809, -0.809, 0.309, 0.809, -0.309, -1.000, -0.309, 0.809, 0, 0);

Y = c(0, 0.951, 0.588, -0.588, -0.951, 0.588, 0.951, 0, -0.951, -0.588, 0, 0);

Z = c(0.5, 0.5, 0.5, 0.5, 0.5, -0.5, -0.5, -0.5, -0.5, -0.5, 1.118, -1.118);

Vertices = data.frame(X,Y,Z);

par(bg=gray(0));

plot.new();

par(usr=c(-3,3,-3,3));

shade = c(0.67, 0.89, 0.66, 0.30, 0.30, 0.30, 0.66, 0.30, 0, 0);

F1 = Vertices[c(1,2,12), ];

F2 = Vertices[c(2,3,12), ];

F3 = Vertices[c(3,4,12), ];

F4 = Vertices[c(4,5,12), ];

F5 = Vertices[c(5,1,12), ];

F6 = Vertices[c(1,2,6), ];

F7 = Vertices[c(2,3,7),];

F8 = Vertices[c(3,4,8),];

F9 = Vertices[c(4,5,9),];

F10 = Vertices[c(5,1,10),];

Faces = list(F1,F2,F3,F4,F5,F6,F7,F8,F9,F10);

for (i in 1:10) names(Faces[[i]]) = c(quote(X),quote(Y),quote(Z) );

for (i in 1:10) polygon(Faces[[i]]$X,Faces[[i]]$Y, col=rgb(0,0,0.2 + 0.8*shade[i]) );

### Like this:

Like Loading...