Oregon Curriculum Network
Discovering Math with Python

All Aboard the S Train!

Those of us exploring the geometry of thinking laid out in Synergetics (subtitled explorations in the geometry of thinking) will be familiar with the Jitterbug Transformation, popularized in this Youtube introduction to the International Mathematicians Union logo:

In [1]:
from IPython.display import YouTubeVideo


The cuboctahedron and icosahedron are related by having the same edge length. The ratio of the two, in terms of volume, is: $20 : 5 \sqrt{2} \phi^2$.

Lets call this the "S factor". It also happens to be the Smod/Emod volume ratio.

In [2]:
import gmpy2

root2 = gmpy2.sqrt(2)
root7 = gmpy2.sqrt(7)
root5 = gmpy2.sqrt(5)
root3 = gmpy2.sqrt(3)

# phi
𝜙 = (gmpy2.sqrt(5) + 1)/2

# Synergetics modules
Smod = (𝜙 **-5)/2  
Emod = (root2/8) * (𝜙 ** -3)
sfactor = Smod/Emod
print("sfactor: {:60.57}".format(sfactor))

sfactor:  1.080363026950905814406172628196375701989460486805627392673

Icosa * sfactor = Cubocta.

In [3]:
sfactor = 2 * root2 * 𝜙 ** -2
print("sfactor: {:60.57}".format(sfactor))

sfactor:  1.080363026950905814406172628196375701989460486805627392673

In [4]:
# sfactor in terms of phi-scaled emods
e3 = Emod * 𝜙 ** -3
print("sfactor: {:60.57}".format(24*Emod + 8*e3))

sfactor:  1.080363026950905814406172628196375701989460486805627392673

The cuboctahedron that jitterbugs into an icosahedron takes twenty regular tetrahedrons -- in volume, eight of them so formed (the other twelve paired in six half-octahedra) -- into twenty irregular tetrahedrons in the corresponding regular icosahedron (same surface edge lengths).

Each of those 20 irregular tetrahedrons we may refer to as an "icosatet" (IcosaTet).

The computation below shows the icosatet (1/sfactor) times 20, giving the same volume as the "Jitterbug icosa" (edges 2R).

In [5]:
icosatet = 1/sfactor


In [6]:
JB_icosa = 20 * icosatet
print("Icosahedron: {:60.57}".format(JB_icosa))  # for volume of JB icosahedron

Icosahedron: 18.512295868219161196009899292654531923571426913640152615969

From Figure 988.00 in Synergetics:

Jitterbug Relationship

The S Train is Leaving the Station...

However there's another twinning or pairing of the cubocta and icosa in Synergetics that arises when we fit both into a contextualizing octahedron.

Consider the canonical octahedron of volume 4, with a cuboctahedron inside, its triangular faces flush with the octahedron's. Its volume is 2.5.

Now consider an icosahedron with eight of its twenty faces flush to the same octahedron, but skewed (tilted) relative to the cuboctahedron's.

From Figure 988.12 in Synergetics by RBF

The relationship between this pair is different than in the Jitterbug Transformation. For one thing, the edges are no longer the same length, and for another, the icosahedron's edges are longer, and its volume is greater.

However, despite these differences, the S-Factor is still involved.

For one thing: the longer edge of the icosahedron is the S-factor, given edges and radii of the cuboctahedron of volume 2.5 are all R = 1 = the radius of one CCP sphere -- each encased by the volume 6 RD (see below).

From Figure 988.00 in Synergetics:

Cuboctahedron and Icosahedron
both with faces flush to Octahedron of volume 4

For another: the cuboctahedron's volume, times S-Factor to the 2nd power, gives the icosahedron's volume.

In [7]:
icosa_within = 2.5 * sfactor * sfactor


Verifying S Module Volume

The "skew icosahedron" inside the volume 4 octahedron is what we use to derive the 24 S modules, which make up the difference in volume between the two. The S module's volume may also be expressed in terms of φ.

In [8]:
smod = (4 - icosa_within)/24
print("smod: {:60.57}".format(smod))

smod:  0.045084971874737120511467085914095294300772949514407155339

In [9]:
print("smod: {:60.57}".format(smod))

smod:  0.045084971874737120511467085914095294300772949514407155339

Lets look at the S module in more detail, and compute its volume from scratch, using a Python formula.

Picking a common apex for three lengths (radials), and then connecting the dots around the base so defined, is step one in using our algorithm. We'll use gmpy2 for its extended precision capabilities.

The Tetrahedron class in tetravolume module is set by default to work in D units (D = 2R) i.e. the canonical tetrahedron, octahedron, icosahedron, all have edges 1.

In [10]:
import tetvols
# assume a = 1 D
a  = 1 
# common apex is F
FH = 1/𝜙
FE = sfactor/2
FG = root3 * FE/2
# connecting the base (same order, i.e. H, E, G)
HE = (3 - root5)/2
EG = FE/2

Smod = tetvols.ivm_volume((FH, FE, FG, HE, EG, GH))
print("smod: {:60.57}".format(Smod))

smod:  0.045084971874737120511467085914095294300772949514407155339

In [11]:
print("Octa Edge = 1")
print("FH: {:60.57}".format(FH))
print("FE: {:60.57}".format(FE))
print("FG: {:60.57}".format(FG))
print("HE: {:60.57}".format(HE))
print("EG: {:60.57}".format(EG))
print("GH: {:60.57}".format(GH))

Octa Edge = 1
FH:  0.618033988749894848204586834365638117720309179805762862135
FE:  0.540181513475452907203086314098187850994730243402813696336
FG:  0.467810913324468290005538599027413209092598872997544460757
HE:  0.381966011250105151795413165634361882279690820194237137865
EG:  0.270090756737726453601543157049093925497365121701406848168
GH:  0.270090756737726453601543157049093925497365121701406848168

Setting a = 2 give us the following edges table:

In [12]:
print("Octa Edge = 2")
print("FH: {:60.57}".format(FH * 2))
print("FE: {:60.57}".format(FE * 2))
print("FG: {:60.57}".format(FG * 2))
print("HE: {:60.57}".format(HE * 2))
print("EG: {:60.57}".format(EG * 2))
print("GH: {:60.57}".format(GH * 2))

Octa Edge = 2
FH:  1.236067977499789696409173668731276235440618359611525724271
FE:  1.080363026950905814406172628196375701989460486805627392673
FG:  0.935621826648936580011077198054826418185197745995088921515
HE:  0.763932022500210303590826331268723764559381640388474275729
EG:  0.540181513475452907203086314098187850994730243402813696336
GH:  0.540181513475452907203086314098187850994730243402813696336

The S Train

The fact that the cuboctahedron and icosahedron relate in two ways via a common S-factor suggests the metaphor of a train or subway route.

Start at the cuboctahedron and follow the Jitterbug Pathway (one stop, one application of the S-factor, but as a reciprocal, since we're dropping in volume).

We've arrived at the Jitterbug icosahedron. Applying 1/S twice more will take us to another cuboctahedron (dubbed "SmallGuy" in some writings). Its triangular faces overlap those of the Jitterbug icosahedron.

In [13]:
SmallGuy = 20 * (1/sfactor) ** 3
print("SmallGuy: {:60.57}".format(SmallGuy))

SmallGuy: 15.860645438769607979506732934761348026253292147308374978763

SmallGuy's edges are 2R times 1/sfactor, since linear change is a 3rd root of volumetric change (when shape is held constant).

Interestingly, this result is one tenth the JB_icosahedron's volume, but a linear measure in this instance.

In [14]:
print("SmallGuy Edge:  {:60.57}".format(2 * (1/sfactor)))  # SmallGuy edge
print("Icosahedron:    {:60.57}".format(JB_icosa))  # for volume of JB icosahedron

SmallGuy Edge:   1.851229586821916119600989929265453192357142691364015261597
Icosahedron:    18.512295868219161196009899292654531923571426913640152615969

When going in the other direction (smaller to bigger), apply the S factor directly (not the reciprocal) since the volumes increase.

For example start at the cuboctahedron of volume 2.5, apply the S factor twice to get the corresponding skew icosahedron ("Icosahedron Within"), its faces embedded in the same volume 4 octahedron (see above).

S is for "Skew"...

However, we might also say "S" is for "Sesame Street" and for "spine" as the Concentric Hierarchy forms the backbone of Synergetics and becomes the familiar neighborhood, what we keep coming back to.

... and for "Subway"

The idea of scale factors taking us from one "station stop" to another within the Concentric Hierarchy jibes with the "hypertoon" concept: smooth transformations terminating in "switch points" from which other transformations also branch (a nodes and edges construct, like the polyhedrons themselves).

Successive applications of both S and Syn3 take us to "station stops" along the "S train" e.g.

$$SmallGuy \rightarrow S^2 \rightarrow icosa \rightarrow S \rightarrow cubocta \rightarrow Syn3 \rightarrow RT$$

and so on. Bigger and bigger (or other way).

Remember Syn3? That's also our $IVM \Leftrightarrow XYZ$ conversion constant. Yet here we're not using it that way, as we're staying in tetravolumes the whole time.

However, what's so is the ratio between the volume of the cube of edges R and the volume of the tetrahedron of edges D (D = 2R) is the same as that between the RT and volume 20 cuboctahedron, where long diagonals of RT = edges of cubocta.

Cube edges = 1/2 x Tetrahedron edges;
Cube:Tetrahedron volume ratio = S3

In [15]:
Syn3 = gmpy2.sqrt(gmpy2.mpq(9,8))
JB_icosa = SmallGuy * sfactor * sfactor
print("JB Icosa:   {:60.57}".format(JB_icosa))
JB_cubocta = JB_icosa * sfactor
print("JB Cubocta: {:60.57}".format(JB_cubocta))
SuperRT = JB_cubocta * Syn3
SuperRT  # 20*S3
print("SuperRT:    {:60.57}".format(SuperRT))

JB Icosa:   18.512295868219161196009899292654531923571426913640152615969
JB Cubocta: 20.000000000000000000000000000000000000000000000000000000000
SuperRT:    21.213203435596425732025330863145471178545078130654221097650

The SuperRT is the RT defined by the Jitterbug icosa (JB_icosa) and its dual, the Pentagonal Dodecahedron of tetravolume $3\sqrt{2}(\phi^2 + 1)$.

The S train through the 2.5 cubocta, which stops at "Icosa Within" does not meet up with S train through 20 cubocta, which runs to SmallGuy.

The 20 and 2.5 cubocta stations are linked by "Double D express" (halve or double all edge lengths).

$$Cubocta 20 \rightarrow DoubleD \rightarrow Cubocta 2.5 \rightarrow S^2 \rightarrow Icosa Within \rightarrow + 24 Smods \rightarrow Octa4$$

The Phi Commuter does a lot of the heavy lifting, multiplying all edges by phi or 1/phi, as in the ...e6, e3, E, E3, E6... progression.

Multiplying edges by x entails multiplying volume by $x^3$.

Take Phi Commuter from SuperRT to the 120 E Mods RT (with radius R), get off and transfer to the T Mods RT (mind the gap of ~0.9994), then take the local to the 7.5 RT.

The space-filling RD6 will be at the same corner (they share vertexes).

RT of volume 7.5 and RD of volume 6
with shared vertexes (by David Koski using vZome)

The RD6's long diagonals make Octa4, your bridge to Icosa Within and the S line to the 2.5 cubocta.

$$SuperRT \rightarrow \phi Commuter \rightarrow Emod RT \rightarrow Tmod RT \rightarrow 3/2 \rightarrow 7.5 RT \rightarrow RD6 \rightarrow Octa4$$

This kind of touring by scale factor and switching pathways is called "taking subways around the neighborhood" (i.e. Sesame Street).

For further reading:

In [ ]: