Cartesian Icosahedron

The following Cartesian coordinates define the vertices of an icosahedron with edge-length 2, centered at the origin:

Icosahedron

(0, ±1, ±𝝋) (±1, ±𝝋, 0) (±𝝋, 0, ±1) where 𝝋 = (1 + √5) / 2 is the golden ratio.

Note that these vertices form three mutually centered, mutually orthogonal golden rectangles. wikia

We offer this javascript program to enumerate the vertices.

let p = (1 + Math.sqrt(5)) / 2 rect((a,b) => [0, a*1, b*p]) rect((a,b) => [a*1, b*p, 0]) rect((a,b) => [a*p, 0, b*1]) function rect(f) { console.log(f(+1,+1)) console.log(f(-1,+1)) console.log(f(+1,-1)) console.log(f(-1,-1)) }

[ 0, 1, 1.618033988749895 ] [ 0, -1, 1.618033988749895 ] [ 0, 1, -1.618033988749895 ] [ 0, -1, -1.618033988749895 ] [ 1, 1.618033988749895, 0 ] [ -1, 1.618033988749895, 0 ] [ 1, -1.618033988749895, 0 ] [ -1, -1.618033988749895, 0 ] [ 1.618033988749895, 0, 1 ] [ -1.618033988749895, 0, 1 ] [ 1.618033988749895, 0, -1 ] [ -1.618033988749895, 0, -1 ]

We save these coordinates in a vector v. We enumerate all pairs and tally the distance² between each, confirming edge length = 2 for nearest neighbors.

6 14.47213595499958 30 10.47213595499958 30 4

We select these and print their indices.

for (let i=0; i<12; i++) for (let j=0; j<i; j++) if (edge(i,j)) console.log([i,j]) function edge(i,j) { let sq = x => x*x let d = sq(v[i][0]-v[j][0]) + sq(v[i][1]-v[j][1]) + sq(v[i][2]-v[j][2]) return d == 4 }

[ 1, 0 ] [ 3, 2 ] [ 4, 0 ] [ 4, 2 ] [ 5, 0 ] [ 5, 2 ] [ 5, 4 ] [ 6, 1 ] [ 6, 3 ] [ 7, 1 ] [ 7, 3 ] [ 7, 6 ] [ 8, 0 ] [ 8, 1 ] [ 8, 4 ] [ 8, 6 ] [ 9, 0 ] [ 9, 1 ] [ 9, 5 ] [ 9, 7 ] [ 10, 2 ] [ 10, 3 ] [ 10, 4 ] [ 10, 6 ] [ 10, 8 ] [ 11, 2 ] [ 11, 3 ] [ 11, 5 ] [ 11, 7 ] [ 11, 9 ]

Positive and Negative Feedback provides rendering ideas. We choose the tetrahedron and replace its four vertices with the icosahedron. github

(If WebGL animation isn't showing below, reopen this page in http link .)

http://ward.dojo.fed.wiki/assets/pages/cartesian-icosahedron/crazy.html HEIGHT 400

Drag to rotate.