{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "[Oregon Curriculum Network](http://www.4dsolutions.net/ocn)
\n", "[Discovering Math with Python](Introduction.ipynb)\n", "\n", "\n", "# Five Octahedrons in S* Module Volumes\n", "\n", "\"Five\n", "\n", "This is a cut and paste job, working from notes messaged by David Koski to [Casey House](https://www.ilovecaseyhouse.com/) and myself. It's about the volume of Five Octahedrons (a five-fold symmetric non-convex shape -- it has \"bumps\").\n", "\n", "My goal is to verify David's numbers using the extended precision library [gmpy2](https://gmpy2.readthedocs.io/en/latest/).\n", "\n", "The precision is expressed in bits, not decimal digits. 100 is already well beyond what a native floating point [IEEE 754](https://en.wikipedia.org/wiki/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.\n", "\n", "Lets go with 200 bits this time. You'll start to see discrepancies in the least significant digits, which is to be expected." ] }, { "cell_type": "code", "execution_count": 1, "metadata": {}, "outputs": [], "source": [ "import gmpy2\n", "gmpy2.get_context().precision=200" ] }, { "cell_type": "code", "execution_count": 2, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "mpfr('1.6180339887498948482045868343656381177203091798057628621354484',200)" ] }, "execution_count": 2, "metadata": {}, "output_type": "execute_result" } ], "source": [ "root5 = gmpy2.sqrt(5)\n", "root2 = gmpy2.sqrt(2)\n", "Ø = (1 + root5)/2\n", "Ø" ] }, { "cell_type": "code", "execution_count": 3, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ " s12 = 0.00014001679103629136258724096203699966688007490164541515572523037\n", " s9 = 0.00059312064482111343538172207721480972171960661370048746793462091\n", " s6 = 0.0025124993703207451041141292708962385537585013564473650274637142\n", " s3 = 0.010643118126104093851838239160799763936753612039489947577789477\n", " S = 0.045084971874737120511467085914095294300772949514407155338621598\n", " S3 = 0.19098300562505257589770658281718094113984541009711856893227582\n", " S6 = 0.8090169943749474241022934171828190588601545899028814310677248\n" ] } ], "source": [ "S = (Ø **-5)/2 # home base Smod\n", "S3 = S * Ø**3 # capital s, phi up\n", "S6 = S3 * Ø**3 # phi up yet again\n", "# and so on\n", "\n", "s3 = S * Ø**-3 # small s, phi down\n", "s6 = s3 * Ø**-3\n", "s9 = s6 * Ø**-3 \n", "s12= s9 * Ø**-3\n", "\n", "for i in 's12, s9, s6, s3, S, S3, S6'.split(\",\"):\n", " print(\"{:>4} =\".format(i), eval(i))" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "The S may be expressed in terms of phi-scaled versions of itself." ] }, { "cell_type": "code", "execution_count": 4, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "mpfr('0.045084971874737120511467085914095294300772949514407155338621637',200)" ] }, "execution_count": 4, "metadata": {}, "output_type": "execute_result" } ], "source": [ "S = 4*s3 + s6 # synonyms\n", "S" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "\"S\n", "\n", "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](http://vzome.com/home/)." ] }, { "cell_type": "code", "execution_count": 5, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "mpfr('6.3343685400050472861798319504493703494251593693233826174984788',200)" ] }, "execution_count": 5, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# Koski writes:\n", "FiveOcta = 132 * S + 36 * s3\n", "RD6 = 126*S + 30*s3\n", "# 1/10 of RTW is 6S+6s3\n", "# adding them together gets the result\n", "# Whew\n", "FiveOcta" ] }, { "cell_type": "code", "execution_count": 6, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "mpfr('6.00000000000000000000000000000000000000000000000000000000001',200)" ] }, "execution_count": 6, "metadata": {}, "output_type": "execute_result" } ], "source": [ "RD6" ] }, { "cell_type": "code", "execution_count": 7, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "mpfr('6.3343685400050472861798319504493703494251593693233826174984788',200)" ] }, "execution_count": 7, "metadata": {}, "output_type": "execute_result" } ], "source": [ "FiveOcta2 = 10116 * s9 + 2388 * s12\n", "FiveOcta2" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "David: \"So, the beauty of working with these bits is that I can move them around.\"" ] }, { "cell_type": "code", "execution_count": 8, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "6.3343685400050472861798319504493703494251593693233826174984788\n", "6.3343685400050472861798319504493703494251593693233826174984738\n", "6.3343685400050472861798319504493703494251593693233826174984738\n", "6.3343685400050472861798319504493703494251593693233826174984788\n" ] } ], "source": [ "for i in 132*S + 36*s3, 564*s3 + 132*s6, 2388*s6 + 564*s9, 10116*s9 + 2388*s12:\n", " print(i)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "\"icosa_within\"\n", "
\n", "Icosa Within by D. B. Koski \n", "
\n", "
\n", "\"rt_inside\"\n", "
\n", "RT Within by D. B. Koski \n", "
\n", "\n", "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.\n", "\n", "This shared Icosahedron has a volume of $2.5 * sfactor^2$ (See *All Aboard the S Train* link below).\n", "\n", "An Icosahedron 8 times larger, $20 * sfactor^2$, has the volume 20 cuboctahedron + that of the RT defined above." ] }, { "cell_type": "code", "execution_count": 9, "metadata": {}, "outputs": [], "source": [ "cubocta = gmpy2.mpfr(2.5) # inscribed in Octa 4\n", "sfactor = 2 * gmpy2.sqrt(2) * Ø ** -2\n", "\n", "Icosa_within = cubocta * sfactor ** 2 # inscribed in Octa 4\n", "RT_within = 60*S + 60*s3 # RT anchored by Icosa_within (long diags)" ] }, { "cell_type": "code", "execution_count": 10, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "23.343685400050472861798319504493703494251593693233826174984688\n", "23.343685400050472861798319504493703494251593693233826174984668\n" ] } ], "source": [ "print(Icosa_within * 8)\n", "print(cubocta * 8 + RT_within) # 20 + RT Within" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "David went on to get the volume of the Compound Five Cuboctahedra, depicted below:\n", "\n", "\"Five\n", "\n", "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:" ] }, { "cell_type": "code", "execution_count": 11, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "mpfr('24.620859575182964124018908203789675166662027137972619884319437',200)" ] }, "execution_count": 11, "metadata": {}, "output_type": "execute_result" } ], "source": [ "480*S + 280*s3" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "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.\n", "\n", "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. \n", "\n", "T_factor = $(\\Phi/\\sqrt{2}) (\\sqrt[3]{2/3})$.\n", "\n", "An RT of 120 T modules has a volume of exactly 5, where T = A = B = 1/24 tetravolumes. \n", "\n", "An RT of 120 E modules has a radius (center to diamond face centers) of exactly 1, and encases a unit radius sphere. \n", "\n", "This slightly larger RT shows up as RT5+ in the table below." ] }, { "cell_type": "code", "execution_count": 14, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "mpfr('0.99948333226234344004642602768142159538180147407535334176866907',200)" ] }, "execution_count": 14, "metadata": {}, "output_type": "execute_result" } ], "source": [ "E = (root2/8) * (Ø ** -3) # home base Emod\n", "E3 = E * Ø ** 3 # Emod phi up\n", "e3 = E * Ø ** -3 # Emod phi down\n", "SuperRT = 120 * E3 # = 20 * Synergetics Constant sqrt(9/8)\n", "\n", "F = gmpy2.mpfr(gmpy2.mpq(1, 16)) # space-filling shape, appears in 5RD\n", "\n", "T_factor = Ø/root2 * gmpy2.root( gmpy2.mpq(2, 3), 3) # T radius vs. E radius of 1\n", "T = E * T_factor ** 3\n", "T_factor" ] }, { "cell_type": "code", "execution_count": 15, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Five VEs : 24.620859575182964124018908203789675166662027137972619884319\n", "SuperRT : 21.213203435596425732025330863145471178545078130654221097650\n", "Cubocta : 20.000000000000000000000000000000000000000000000000000000000\n", "Icosa : 18.512295868219161196009899292654531923571426913640152615969\n", "SmallGuy : 15.860645438769607979506732934761348026253292147308374978763\n", "P Dodeca : 15.350018208050781864011005748221813389851871774314935789111\n", "Five Octas : 6.334368540005047286179831950449370349425159369323382617498\n", "Rh Dodeca (RD): 6.000000000000000000000000000000000000000000000000000000000\n", "RT5+ : 5.007758031332838515932741440199835648703170828569810207562\n", "RT5 : 5.000000000000000000000000000000000000000000000000000000000\n", "RT5 (check) : 5.000000000000000000000000000000000000000000000000000000000\n", "Octa : 4.000000000000000000000000000000000000000000000000000000000\n", "Cube : 3.000000000000000000000000000000000000000000000000000000000\n", "Skew Icosa : 2.917960675006309107724789938061712936781449211654228271873\n", "Small VE : 2.500000000000000000000000000000000000000000000000000000000\n", "Five Tetras : 2.056914331290483441234068769229324677680965774781298077852\n", "Tetra : 1.000000000000000000000000000000000000000000000000000000000\n", "----------------------------------------------------------------------------\n", "F : 0.062500000000000000000000000000000000000000000000000000000\n", "E3 : 0.176776695296636881100211090526212259821208984422118509147\n", "E : 0.041731316927773654299439512001665297072526423571415085063\n", "e3 : 0.009851427585542263902453042519551071531103290136458168895\n", "T : 0.041666666666666666666666666666666666666666666666666666667\n", "S6 : 0.809016994374947424102293417182819058860154589902881431068\n", "S3 : 0.190983005625052575897706582817180941139845410097118568932\n", "S : 0.045084971874737120511467085914095294300772949514407155339\n", "s3 : 0.010643118126104093851838239160799763936753612039489947578\n", "s6 : 0.002512499370320745104114129270896238553758501356447365027\n" ] } ], "source": [ "print(\"Five VEs : {:60.57}\".format(480*S + 280*s3)) # compound shape\n", "print(\"SuperRT : {:60.57}\".format(SuperRT)) # formed by P Dodeca + Icosa verts\n", "print(\"Cubocta : {:60.57}\".format(20*S6 + 20*S3)) # classic Jitterbug (JB) starts here\n", "print(\"Icosa : {:60.57}\".format(100*E3 + 20*E)) # JB icosa\n", "print(\"SmallGuy : {:60.57}\".format(360*E + 85*e3)) # skew to JB icosa\n", "print(\"P Dodeca : {:60.57}\".format(348*E + 84*e3)) # dual to JB icosa, edges crossing\n", "print(\"Five Octas : {:60.57}\".format(132*S + 36*s3)) # compound shape\n", "print(\"Rh Dodeca (RD): {:60.57}\".format(6*S6 + 6*S3)) # space filler, shares verts with RT7.5\n", "print(\"RT5+ : {:60.57}\".format(120*E)) # 120 E modules\n", "print(\"RT5 : {:60.57}\".format(5*S6 + 5*S3)) # 120 T modules\n", "print(\"RT5 (check) : {:60.57}\".format(T * 120))\n", "print(\"Octa : {:60.57}\".format(4*S6 + 4*S3)) # JB octahedron\n", "print(\"Cube : {:60.57}\".format(3*S6 + 3*S3)) \n", "print(\"Skew Icosa : {:60.57}\".format(Icosa_within)) # askew to 2.5 VE\n", "print(\"Small VE : {:60.57}\".format(cubocta)) # 1/8 volume of JB cubocta\n", "print(\"Five Tetras : {:60.57}\".format(35*S + 45*s3)) # per Koski\n", "print(\"Tetra : {:60.57}\".format(5*S3 + S)) # unit volume\n", "print(\"-\" * 76)\n", "print(\"F : {:60.57}\".format(F)) # fourth RITE (Rite = 2 Mites)\n", "print(\"E3 : {:60.57}\".format(E3)) \n", "print(\"E : {:60.57}\".format(E)) \n", "print(\"e3 : {:60.57}\".format(e3)) \n", "print(\"T : {:60.57}\".format(E * T_factor**3)) \n", "print(\"S6 : {:60.57}\".format(S6))\n", "print(\"S3 : {:60.57}\".format(S3))\n", "print(\"S : {:60.57}\".format(S))\n", "print(\"s3 : {:60.57}\".format(s3))\n", "print(\"s6 : {:60.57}\".format(s6))" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "*For further reading:*\n", "\n", "[All Aboard the S Train](S_Train.ipynb)" ] } ], "metadata": { "kernelspec": { "display_name": "Python 3", "language": "python", "name": "python3" }, "language_info": { "codemirror_mode": { "name": "ipython", "version": 3 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", "version": "3.6.8" } }, "nbformat": 4, "nbformat_minor": 2 }