Ring of 20 spheres and various polyhedra​
​By Sándor Kabai
A ring is formed from 20 icosahedra with face to face connection (ico20). Then such rings are arranged so that at their intersection point the icosahedra coincide. Ico20 consists of five units. The unit contains four icosahedra, each in different orientation (marked with different colors). The centres of icosahedra are on a wavy decagon, either at the vertices or at middle of sides. Equivalent sphere and various polyhedra can be substituted with icosahedra.
In[]:=
sp=Sphere[];​​fi=GoldenRatio;​​alf=ArcTan[fi];​​alf1=ArcTan[fi^2];​​bet=ArcTan[1/fi];​​bet1=ArcTan[1/fi^2];​​eps=bet-bet1;​​(*m=distanceoftwoparallelfaces,​​2s=sideofdecagon,etc:dimensionswithinthedecagon*)​​m=N[Sqrt[(2fi+1)^2+fi^2]/3];​​s=mCos[eps];​​d=s/Tan[2Pi/20];​​r=Sqrt[d^2+s^2];​​h=2mSin[eps];​​k=rSin[3Pi/10];​​l=rCos[3Pi/10];​​ico=PolyhedronData["Icosahedron","Faces"];
In[]:=
rt=PolyhedronData["RhombicTriacontahedron","Faces"];​​rtn=Rotate[Scale[rt,0.64],Pi,{0,0,1}];​​Graphics3D[{ico,Opacity[0.3],rtn},ImageSize300,ViewPoint{0,100,0},ViewAngle->0.01,BoxedFalse,SphericalRegionTrue]​​
Out[]=
In[]:=
rh=PolyhedronData["RhombicHexecontahedron","Faces"];​​rhn=Rotate[Scale[rh,0.64],Pi,{0,0,1}];​​rhn1=Rotate[Scale[rh,0.32],Pi,{0,0,1}];​​Graphics3D[{ico,Opacity[0.3],rhn},ImageSize300,ViewPoint{0,100,0},ViewAngle->0.01,BoxedFalse,SphericalRegionTrue]
Out[]=
In[]:=
dod=PolyhedronData["Dodecahedron","Faces"];​​dodn=Scale[dod,0.54];​​Graphics3D[{dodn,Opacity[0.3],ico},ImageSize300,ViewPoint{0,100,0},ViewAngle->0.01,BoxedFalse,SphericalRegionTrue]
Out[]=
In[]:=
spm=Sphere[{0,0,0},m/2];​​

This is where ico can be replaced with other object

In[]:=
(*​​ico=spm;​​ico=sp;​​ico=rtn;​​ico=rhn;​​ico=rhn1;​​ico=dodn;*)​​ico=rhn1;​​​​icon={Green,Rotate[ico,Pi/2,{0,0,1}]};​​icofl=Rotate[Rotate[ico,Pi/2,{0,0,1}],-Pi/2+bet+bet1,{1,0,0}];icoup=Translate[Rotate[icofl,0Pi,{0,0,1}],{0,0,m}];icoup1=Translate[icofl,{0,0,2m}];​​Graphics3D[{icofl,{Opacity[0.3],icoup},icoup1},ImageSize300,ViewPoint{0,100,0},ViewAngle->0.01,BoxedFalse,SphericalRegionTrue]
Out[]=
icon = central ico, s1,s2,s3 = connecting ico corresonding to s5 geometry
In[]:=
s1={Yellow,Rotate[Rotate[Translate[Rotate[icoup,Pi,{0,0,1}],{0,0,0}],-alf1-bet,{1,0,0}],2Pi/5,{0,0,1}]};​​s2={Cyan,Rotate[Rotate[Translate[Rotate[icoup1,Pi,{0,0,1}],{0,0,0}],-alf1-bet,{1,0,0}],2Pi/5,{0,0,1}]};​​s3=Rotate[Rotate[Translate[Rotate[icoup,Pi,{0,0,1}],{0,0,0}],-alf1-bet,{1,0,0}],-2Pi/5,{0,0,1}];​​s5=Table[Rotate[{s3},i2Pi/5,{0,0,1}],{i,5}];​​s5o=Table[Rotate[Rotate[{s3},Pi,{0,1,0}],i2Pi/5+0.001,{0,0,1}],{i,5}];​​Graphics3D[{s5,s2,icon},ImageSize300,ViewPoint{0,0,10},BoxedFalse,SphericalRegionTrue]
Out[]=
This is the unit (icon, s1, s2, s3) which is repeated fives times around an r circle
In[]:=
Graphics3D[{icon,s1,s2,s3},ImageSize300,ViewPoint{0,0,10},BoxedFalse,SphericalRegionTrue]
Out[]=
In[]:=
r1=Table[Rotate[Translate[{icon,s1,s2,s3},{0,-r,0}],i2Pi/5,{0,0,1}],{i,5}];​​Graphics3D[{sp,r1},ImageSize300,ViewPoint{0,0,10},BoxedFalse,SphericalRegionTrue]
Out[]=
In[]:=
r1=Table[Rotate[Translate[{icon,s1,s2,s3},{0,-r,0}],i2Pi/5,{0,0,1}],{i,5}];​​r1h=Translate[r1,{2l,2k,0}];​​r2=Translate[r1,{2d,0,0}];​​Graphics3D[{r1,r2},ImageSize300,ViewPoint{0,0,10},BoxedFalse,SphericalRegionTrue]
Out[]=
In[]:=
r1a=Table[Rotate[Translate[{s5,icon,s1,s2,s3},{0,-r,0}],i2Pi/5+Pi/5,{0,0,1}],{i,5}];​​Graphics3D[{sp,r1a},ImageSize300,ViewPoint{0,0,10},BoxedFalse,SphericalRegionTrue]
Out[]=
Bring icon to the centre, and rotate ring five times
In[]:=
rc=Translate[r1,{0,r,0}];​​rc5=Table[Rotate[rc,i2Pi/5,{0,0,1}],{i,5}];​​Graphics3D[{rc5},ImageSize400,ViewPoint{0,0,10},BoxedFalse,SphericalRegionTrue]
Out[]=
In[]:=
rc5out=Table[Rotate[Translate[rc,{0,-2r-2k,0}],i2Pi/5,{0,0,1}],{i,5}];​​​​Graphics3D[{rc5,rc5out},ImageSize400,ViewPoint{0,0,10},BoxedFalse,SphericalRegionTrue]
Out[]=
In[]:=
rc5rim=Table[Rotate[Translate[rc5,{0,-2r-2k,0}],i2Pi/5,{0,0,1}],{i,5}];​​Graphics3D[{rc5,rc5rim},ImageSize500,BoxedFalse,ViewPoint{0,0,10},SphericalRegionTrue]
Out[]=
In[]:=
rc5rim1=Table[Rotate[Translate[{rc5},{0,-2r-2k+1.8,0}],i2Pi/5,{0,0,1}],{i,5}];​​Graphics3D[{rc5rim1},ImageSize500,BoxedFalse,ViewPoint{0,0,10},SphericalRegionTrue]
Out[]=
In[]:=
rc5rim2=Table[Rotate[Translate[rc5,{0,2r+2k,0}],i2Pi/5,{0,0,1}],{i,5}];​​Graphics3D[{rc5,rc5rim2},ImageSize500,BoxedFalse,ViewPoint{0,0,10},SphericalRegionTrue]
Out[]=
In[]:=
rc5rim3=Table[Rotate[Translate[rc5,{0,2r+2k-1.86,0}],i2Pi/5,{0,0,1}],{i,5}];​​Graphics3D[{rc5rim3},ImageSize500,BoxedFalse,ViewPoint{0,0,10},SphericalRegionTrue]
Out[]=
In[]:=
rc5bottom=Translate[rc5,{0,-2r-2k,0}];​​ten1=Translate[{rc5,rc5bottom},{0,r+k,0}];​​ten2=Table[Rotate[Translate[{ten1},{-(r+k)/Tan[2Pi/20],0,0}],i2Pi/5,{0,0,1}],{i,5}];​​Graphics3D[{ten2,ten1},ImageSize500,BoxedFalse,ViewPoint{0,0,10},SphericalRegionTrue]
Out[]=
In[]:=
dis=d/Sin[2Pi/20];​​ten=Table[Rotate[Translate[Rotate[r1,iPi,{0,0,1}],{-dis,0,0}],i2Pi/10,{0,0,1}],{i,10}];​​lent=Translate[{rc5},{0,-2r-2k+1.8,0}];​​Graphics3D[{ten,lent},ImageSize400,ViewPoint{0,0,10},BoxedFalse,SphericalRegionTrue]
Out[]=
In[]:=
​​r3=Rotate[Rotate[r2,3Pi/5,{0,0,1},{2d,0,0}],3Pi/5,{0,0,1}];​​r4=Rotate[r2,6Pi/5,{0,0,1}];​​Graphics3D[{ten,r1,r2,r3,r4},ImageSize400,ViewPoint{0,0,10},BoxedFalse,SphericalRegionTrue]
Out[]=
In[]:=
em=d/Sin[2Pi/10];​​rcs=Translate[r1,{0,em,0}];​​rc5a=Table[Rotate[rcs,i2Pi/5,{0,0,1}],{i,5}];​​​​Graphics3D[{rc5a},ImageSize400,ViewPoint{0,0,10},BoxedFalse,SphericalRegionTrue]
Out[]=
In[]:=
Graphics3D[{Translate[{icon,s5},{0,0,h}],rc5a},ImageSize400,ViewPoint{0,0,10},BoxedFalse,SphericalRegionTrue]
Out[]=
In[]:=
em=d/Sin[2Pi/10];​​rcs=Translate[r1,{0,em,0}];​​rc5a=Table[Rotate[rcs,i2Pi/5,{0,0,1}],{i,5}];​​r1down=Table[Rotate[Translate[r1,{0,-2r,0}],i2Pi/5-2Pi/5,{0,0,1}],{i,5}];​​​​Graphics3D[{r1down,sp,rc5a},ImageSize500,ViewPoint{0,0,10},BoxedFalse,SphericalRegionTrue]
Out[]=
In[]:=
Graphics3D[{Translate[{s5,icon},{0,0,h}],r1down,rc5a},ImageSize500,ViewPoint{0,0,10},BoxedFalse,SphericalRegionTrue]
Out[]=