Oregon Curriculum Network
Discovering Math with Python

Five Octahedrons in S* Module Volumes

This is a cut and paste job, working from notes messaged by David Koski to Casey House and myself. It's about the volume of Five Octahedrons (a five-fold symmetric non-convex shape -- it has "bumps").

My goal is to verify David's numbers using the extended precision library gmpy2.

The precision is expressed in bits, not decimal digits. 100 is already well beyond what a native floating point IEEE 754 would contain. If using a live version of this Notebook, you'll be able to take control of the context, including how many bits.

Lets go with 200 bits this time. You'll start to see discrepancies in the least significant digits, which is to be expected.


In [1]:
import gmpy2
gmpy2.get_context().precision=200

In [2]:
root5 = gmpy2.sqrt(5)
root2 = gmpy2.sqrt(2)
Ø = (1 + root5)/2
Ø


Out[2]:
mpfr('1.6180339887498948482045868343656381177203091798057628621354484',200)

In [3]:
S  = (Ø **-5)/2      # home base Smod
S3 = S * Ø**3        # capital s, phi up
S6 = S3 * Ø**3       # phi up yet again
# and so on

s3 =  S * Ø**-3      # small s, phi down
s6 = s3 * Ø**-3
s9 = s6 * Ø**-3 
s12= s9 * Ø**-3

for i in 's12, s9, s6, s3, S, S3, S6'.split(","):
    print("{:>4} =".format(i), eval(i))


 s12 = 0.00014001679103629136258724096203699966688007490164541515572523037
  s9 = 0.00059312064482111343538172207721480972171960661370048746793462091
  s6 = 0.0025124993703207451041141292708962385537585013564473650274637142
  s3 = 0.010643118126104093851838239160799763936753612039489947577789477
   S = 0.045084971874737120511467085914095294300772949514407155338621598
  S3 = 0.19098300562505257589770658281718094113984541009711856893227582
  S6 = 0.8090169943749474241022934171828190588601545899028814310677248

The S may be expressed in terms of phi-scaled versions of itself.


In [4]:
S = 4*s3 + s6  # synonyms
S


Out[4]:
mpfr('0.045084971874737120511467085914095294300772949514407155338621637',200)

The five octahedrons are presumed to have edges 2R, the same edge used for the unit volume tetrahedron, and for the 12-around-1 cuboctahedron. The dissection by David Koski was done in vZome.


In [5]:
# Koski writes:
FiveOcta = 132 * S + 36 * s3
RD6 = 126*S + 30*s3
# 1/10 of RTW is 6S+6s3
# adding them together gets the result
# Whew
FiveOcta


Out[5]:
mpfr('6.3343685400050472861798319504493703494251593693233826174984788',200)

In [6]:
RD6


Out[6]:
mpfr('6.00000000000000000000000000000000000000000000000000000000001',200)

In [7]:
FiveOcta2 = 10116 * s9 + 2388 * s12
FiveOcta2


Out[7]:
mpfr('6.3343685400050472861798319504493703494251593693233826174984788',200)

David: "So, the beauty of working with these bits is that I can move them around."


In [8]:
for i in 132*S + 36*s3, 564*s3 + 132*s6, 2388*s6 + 564*s9, 10116*s9 + 2388*s12:
    print(i)


6.3343685400050472861798319504493703494251593693233826174984788
6.3343685400050472861798319504493703494251593693233826174984738
6.3343685400050472861798319504493703494251593693233826174984738
6.3343685400050472861798319504493703494251593693233826174984788

Icosa Within by D. B. Koski

RT Within by D. B. Koski

The Five Octahedra each of volume 4, edges 2R, contain a shared Icosahedron, the long diagonals of which define a corresponding RT as shown by the Koski vZomes above.

This shared Icosahedron has a volume of $2.5 * sfactor^2$ (See All Aboard the S Train link below).

An Icosahedron 8 times larger, $20 * sfactor^2$, has the volume 20 cuboctahedron + that of the RT defined above.


In [9]:
cubocta = gmpy2.mpfr(2.5)                   # inscribed in Octa 4
sfactor = 2 * gmpy2.sqrt(2) * Ø ** -2

Icosa_within = cubocta * sfactor ** 2       # inscribed in Octa 4
RT_within = 60*S + 60*s3                    # RT anchored by Icosa_within (long diags)

In [10]:
print(Icosa_within * 8)
print(cubocta * 8 + RT_within)  # 20 + RT Within


23.343685400050472861798319504493703494251593693233826174984688
23.343685400050472861798319504493703494251593693233826174984668

David went on to get the volume of the Compound Five Cuboctahedra, depicted below:

The cuboctahedrons have the same edge lengths as the octahedrons above, meaning they have volume 20 versus volume 4. The answer, per Koski, may again be expressed in terms of phi-scaled S modules:


In [11]:
480*S + 280*s3


Out[11]:
mpfr('24.620859575182964124018908203789675166662027137972619884319437',200)

Lets take this opportunity to contextualize the above in terms of our larger volumes table. We'll need a few more players, namely the E family.

The T_factor, about 0.99948333, and discussed in Synergetics, is the linear scale factor by which the E module is reduced to create a T module. This T_factor to the 3rd power would be the volumetric reduction factor, and applied to the E module returns volume 1/24.

T_factor = $(\Phi/\sqrt{2}) (\sqrt[3]{2/3})$.

An RT of 120 T modules has a volume of exactly 5, where T = A = B = 1/24 tetravolumes.

An RT of 120 E modules has a radius (center to diamond face centers) of exactly 1, and encases a unit radius sphere.

This slightly larger RT shows up as RT5+ in the table below.


In [14]:
E  = (root2/8) * (Ø ** -3)  # home base Emod
E3 = E * Ø **  3            # Emod phi up
e3 = E * Ø ** -3            # Emod phi down
SuperRT = 120 * E3          # = 20 * Synergetics Constant sqrt(9/8)

F  = gmpy2.mpfr(gmpy2.mpq(1, 16))   # space-filling shape, appears in 5RD

T_factor = Ø/root2 * gmpy2.root( gmpy2.mpq(2, 3), 3) # T radius vs. E radius of 1
T = E * T_factor ** 3
T_factor


Out[14]:
mpfr('0.99948333226234344004642602768142159538180147407535334176866907',200)

In [15]:
print("Five VEs      : {:60.57}".format(480*S + 280*s3)) # compound shape
print("SuperRT       : {:60.57}".format(SuperRT))        # formed by P Dodeca + Icosa verts
print("Cubocta       : {:60.57}".format(20*S6 + 20*S3))  # classic Jitterbug (JB) starts here
print("Icosa         : {:60.57}".format(100*E3 + 20*E))  # JB icosa
print("SmallGuy      : {:60.57}".format(360*E + 85*e3))  # skew to JB icosa
print("P Dodeca      : {:60.57}".format(348*E + 84*e3))  # dual to JB icosa, edges crossing
print("Five Octas    : {:60.57}".format(132*S + 36*s3))  # compound shape
print("Rh Dodeca (RD): {:60.57}".format(6*S6 + 6*S3))    # space filler, shares verts with RT7.5
print("RT5+          : {:60.57}".format(120*E))          # 120 E modules
print("RT5           : {:60.57}".format(5*S6 + 5*S3))    # 120 T modules
print("RT5 (check)   : {:60.57}".format(T * 120))
print("Octa          : {:60.57}".format(4*S6 + 4*S3))    # JB octahedron
print("Cube          : {:60.57}".format(3*S6 + 3*S3))    
print("Skew Icosa    : {:60.57}".format(Icosa_within))   # askew to 2.5 VE
print("Small VE      : {:60.57}".format(cubocta))        # 1/8 volume of JB cubocta
print("Five Tetras   : {:60.57}".format(35*S + 45*s3))   # per Koski
print("Tetra         : {:60.57}".format(5*S3 + S))       # unit volume
print("-" * 76)
print("F             : {:60.57}".format(F))              # fourth RITE (Rite = 2 Mites)
print("E3            : {:60.57}".format(E3)) 
print("E             : {:60.57}".format(E)) 
print("e3            : {:60.57}".format(e3)) 
print("T             : {:60.57}".format(E * T_factor**3)) 
print("S6            : {:60.57}".format(S6))
print("S3            : {:60.57}".format(S3))
print("S             : {:60.57}".format(S))
print("s3            : {:60.57}".format(s3))
print("s6            : {:60.57}".format(s6))


Five VEs      : 24.620859575182964124018908203789675166662027137972619884319
SuperRT       : 21.213203435596425732025330863145471178545078130654221097650
Cubocta       : 20.000000000000000000000000000000000000000000000000000000000
Icosa         : 18.512295868219161196009899292654531923571426913640152615969
SmallGuy      : 15.860645438769607979506732934761348026253292147308374978763
P Dodeca      : 15.350018208050781864011005748221813389851871774314935789111
Five Octas    :  6.334368540005047286179831950449370349425159369323382617498
Rh Dodeca (RD):  6.000000000000000000000000000000000000000000000000000000000
RT5+          :  5.007758031332838515932741440199835648703170828569810207562
RT5           :  5.000000000000000000000000000000000000000000000000000000000
RT5 (check)   :  5.000000000000000000000000000000000000000000000000000000000
Octa          :  4.000000000000000000000000000000000000000000000000000000000
Cube          :  3.000000000000000000000000000000000000000000000000000000000
Skew Icosa    :  2.917960675006309107724789938061712936781449211654228271873
Small VE      :  2.500000000000000000000000000000000000000000000000000000000
Five Tetras   :  2.056914331290483441234068769229324677680965774781298077852
Tetra         :  1.000000000000000000000000000000000000000000000000000000000
----------------------------------------------------------------------------
F             :  0.062500000000000000000000000000000000000000000000000000000
E3            :  0.176776695296636881100211090526212259821208984422118509147
E             :  0.041731316927773654299439512001665297072526423571415085063
e3            :  0.009851427585542263902453042519551071531103290136458168895
T             :  0.041666666666666666666666666666666666666666666666666666667
S6            :  0.809016994374947424102293417182819058860154589902881431068
S3            :  0.190983005625052575897706582817180941139845410097118568932
S             :  0.045084971874737120511467085914095294300772949514407155339
s3            :  0.010643118126104093851838239160799763936753612039489947578
s6            :  0.002512499370320745104114129270896238553758501356447365027

For further reading:

All Aboard the S Train