A universal great rhombicosidodecahedron by truncated icosidodecahedron​
​by Sándor Kabai
A universal GreatRhombicosidodecahedron (GRD) is produced by truncating an Icosidodecahedron (ID). A SmallRhombicosidodecahedron (SRD) is produced at the end of the truncation process, during which the size is increased in order to keep the truncated surface square.
fi=GoldenRatio;​​alf=ArcTan[fi];​​bet=ArcTan[1/fi];​​bet1=ArcTan[1/fi^2];​​y=0.5+0.5fi;​​el=yfi;​​u=0.5Sqrt[3]/3;​​unit=Sqrt[3]/3;​​grd=GraphicsComplex[PolyhedronData["GreatRhombicosidodecahedron","VertexCoordinates"],Polygon[PolyhedronData["GreatRhombicosidodecahedron","FaceIndices"]]];​​grdn=Rotate[Scale[Rotate[grd,bet,{0,1,0}],1{1,1,1},{0,0,0}],Pi/2,{0,0,1}];​​ico=GraphicsComplex[PolyhedronData["Icosahedron","VertexCoordinates"],Polygon[PolyhedronData["Icosahedron","FaceIndices"]]];​​icofr=Normal[ico]/.p:Polygon[__](p/.pts:{{_?NumericQ,_,_},__}Module[{cent,innervtx},cent=Mean[pts];​​innervtx={1-0.15,0.15}.{#,cent}&/@pts;​​Join[pts,pts[[{1}]],innervtx,innervtx[[{1}]]]])//#&;​​icofr1=Rotate[Scale[icofr,2.618{1,1,1},{0,0,0}],Pi/2,{0,0,1}];​​srd=GraphicsComplex[PolyhedronData["SmallRhombicosidodecahedron","VertexCoordinates"],Polygon[PolyhedronData["SmallRhombicosidodecahedron","FaceIndices"]]];​​​​DynamicManipulate​​v=xCos[bet1];​​is=(0.5unit+v)unit;​​t=2isunit;​​shift=0.5unit+v;​​sink=xTan[bet1];​​(*square*)​​s1={x,-x,0};​​sqv=Table[RotationTransform[i2Pi/4,{0,0,1}][s1],{i,4}];​​sq=Polygon[sqv];​​sq1=Translate[sq,{0,0,isfi-sink}];​​sq2=Translate[sq,{0,0,-isfi+sink}];​​sq3=Rotate[{sq1,sq2},Pi/2,{1,0,0}];​​sq4=Rotate[{sq1,sq2},Pi/2,{0,1,0}];​​sq30=Table[Rotate[Rotate[{sq1,sq2,sq3,sq4},bet,{1,0,0}],i2Pi/5+Pi/5,{0,0,1}],{i,5}];​​​​(*hexagon*)​​b1={x,-u,0};​​b2=RotationTransform[2Pi/3,{0,0,1}][b1];​​b3=RotationTransform[4Pi/3,{0,0,1}][b1];​​b123=Polygon[{b1,b2,b3}];​​c1={-x,-u,0};​​c2=RotationTransform[2Pi/3,{0,0,1}][c1];​​c3=RotationTransform[4Pi/3,{0,0,1}][c1];​​hex=Rotate[Polygon[{b1,c2,b2,c3,b3,c1}],Pi/3,{0,0,1}];​​​​t1=Rotate[Translate[{hex},{0,-shift,0}],bet1,{1,0,0}];​​t2=Rotate[t1,Pi,{0,0,1}];​​hexa=Table[Rotate[Rotate[Translate[{t1,t2},{0,0,isfi}],alf,{1,0,0}],i2Pi/5,{0,0,1}],{i,5}];​​hexb=Rotate[hexa,Pi,{1,0,0}];​​hex20={hexa,hexb};​​(*decagon*)​​height=isfi-sink;​​p0={-x,-x,height};​​p1=RotationTransform[bet,{0,1,0}][p0];​​p2=RotationTransform[2Pi/5,{0,0,1}][p1];​​p3=RotationTransform[4Pi/5,{0,0,1}][p1];​​p4=RotationTransform[6Pi/5,{0,0,1}][p1];​​p5=RotationTransform[8Pi/5,{0,0,1}][p1];​​q0={-x,x,height};​​q1=RotationTransform[bet,{0,1,0}][q0];​​q2=RotationTransform[2Pi/5,{0,0,1}][q1];​​q3=RotationTransform[4Pi/5,{0,0,1}][q1];​​q4=RotationTransform[6Pi/5,{0,0,1}][q1];​​q5=RotationTransform[8Pi/5,{0,0,1}][q1];​​dec1=Rotate[Polygon[{p1,q1,p2,q2,p3,q3,p4,q4,p5,q5}],Pi/2,{0,0,1}];​​dec5=Table[Rotate[Rotate[Rotate[dec1,Pi,{0,0,1}],-2bet,{1,0,0}],i2Pi/5,{0,0,1}],{i,5}];​​dec6=Rotate[{dec1,dec5},Pi,{1,0,0}];​​dec12={dec1,dec5,dec6};​​grdg={dec12,Red,sq30,Green,hex20};​​​​Graphics3D[{icofr1,grdg},BoxedFalse,SphericalRegionTrue,ImageSize400,PlotRange3],​​{{x,0.3,"side"},{0"ID",0.5/3"GRD",0.5"SRD"}},​​{{x,0.5/3,"ratio of edges"},0,0.5,Appearance->"Labeled"},​​TrackedSymbols{x},SaveDefinitionsTrue​​​​
Out[]=
Normally, truncation of ID involves the creation of rectangles, and the size does not change
Needs["PolyhedronOperations`"];​​Dynamic[Manipulate[​​id=GraphicsComplex[PolyhedronData["Icosidodecahedron","VertexCoordinates"],Polygon[PolyhedronData["Icosidodecahedron","FaceIndices"]]];​​idn=Rotate[Scale[id,1/2{1,1,1},{0,0,0}],-Pi/2,{0,0,1}];​​idtr=Truncate[id,idt];​​Graphics3D[{icofr1,Yellow,idtr},BoxedFalse,SphericalRegionTrue,ImageSize400,PlotRange10],​​{{idt,0.4,"truncase ID"},0,0.5},​​TrackedSymbols{idt},SaveDefinitionsTrue]]
Out[]=