GeoGebra Script versión 003
El siguiente ggbscript es un poco más corto.
#Points hexagon
n=6
Execute(Sequence("A"+i+"=Rotate( (cos(pi/3*"+i+"), sin(pi/3*"+i+")), -pi/6, (0,0) )", i, 1, n))
#Hexagon
Poly01=Polygon(A1, A2, A3, A4, A5, A6)
#Origin
O=(0,0)
#Segment from center
S2=Segment(O, A2)
S4=Segment(O, A4)
S6=Segment(O, A6)
#Circles corners
r=Slider(0.1, 1, 0.1, 1, 140, false, true, false, false)
C1=Circle(A1, r)
C3=Circle(A3, r)
#Circle center
C0=Circle(O, r)
#Intersections
I1=Intersect( C1, a1 )
J1=Intersect( C3, a2 )
L1=Intersect( C0, S2 )
#Object
T1=Polygon( A1, I1, L1, J1, A3, O )
T2=Rotate(T1, 2*pi/3, O)
T3=Rotate(T1, -2*pi/3, O)
#Vectors
auxray=Ray(O, A1)
auxPoint=Intersect(C1, auxray, 2)
u1=Vector(O, auxPoint )
u2=Rotate(u1, pi/3)
#u3=Rotate(u1, 2*pi/3)
u3=u1+u2
u4=u1+2*u2
u5=2*u1+u2
#First ring
Execute(Sequence("FA"+i+"=Translate( T1, Rotate( u1, pi/3*"+i+", O ))", i, 1, 6))
Execute(Sequence("FB"+i+"=Translate( T2, Rotate( u1, pi/3*"+i+", O ))", i, 1, 6))
Execute(Sequence("FC"+i+"=Translate( T3, Rotate( u1, pi/3*"+i+", O ))", i, 1, 6))
#Second ring
Execute(Sequence("SA"+i+"=Translate( T1, If(Mod("+i+", 2)==0, Rotate( u1 + u2, pi/3*("+i+"/2-1), O ), Rotate( 2*u1, pi/3*(("+i+"+1)/2-1), O ) ) )", i, 1, 12))
Execute(Sequence("SB"+i+"=Translate( T2, If(Mod("+i+", 2)==0, Rotate( u1 + u2, pi/3*("+i+"/2-1), O ), Rotate( 2*u1, pi/3*(("+i+"+1)/2-1), O ) ) )", i, 1, 12))
Execute(Sequence("SC"+i+"=Translate( T3, If(Mod("+i+", 2)==0, Rotate( u1 + u2, pi/3*("+i+"/2-1), O ), Rotate( 2*u1, pi/3*(("+i+"+1)/2-1), O ) ) )", i, 1, 12))