Oregon Curriculum Network
Discovering Math with Python
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.
import gmpy2
gmpy2.get_context().precision=200
root5 = gmpy2.sqrt(5)
root2 = gmpy2.sqrt(2)
Ø = (1 + root5)/2
Ø
mpfr('1.6180339887498948482045868343656381177203091798057628621354484',200)
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.
S = 4*s3 + s6 # synonyms
S
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.
# 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
mpfr('6.3343685400050472861798319504493703494251593693233826174984788',200)
RD6
mpfr('6.00000000000000000000000000000000000000000000000000000000001',200)
FiveOcta2 = 10116 * s9 + 2388 * s12
FiveOcta2
mpfr('6.3343685400050472861798319504493703494251593693233826174984788',200)
David: "So, the beauty of working with these bits is that I can move them around."
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
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.
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)
print(Icosa_within * 8)
print(cubocta * 8 + RT_within) # 20 + RT Within
23.343685400050472861798319504493703494251593693233826174984688 23.343685400050472861798319504493703494251593693233826174984668
480*S + 280*s3
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.
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
mpfr('0.99948333226234344004642602768142159538180147407535334176866907',200)
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: