partno spirograph \$\$ generate a spirograph figure by the following \$\$ parametric equations: \$\$ x = x_0[mcost+acos(nt)]-y_0[msint-asin(nt)] \$\$ y = y_0[mcost+acos(nt)]+x_0[msint-asin(nt)] \$\$ Eric W. Weisstein."Spirograph."From MathWorld-A Wolfram Web Resource. \$\$ see http://mathworld.wolfram.com/Spirograph.html clprnt machin/dxf machin/pmill theta=0 \$\$ t=0 \$\$parametric variable pi=3.1416 \$\$\$\$\$\$\$\$\$\$\$\$\$\$\$\$\$\$\$\$\$\$\$\$\$\$\$\$\$\$\$\$\$\$\$\$\$\$\$\$\$\$\$\$\$\$\$\$\$\$\$\$\$\$\$\$\$\$\$\$\$\$\$\$\$\$\$ \$\$ adjust these variables for varying shapes and positions, etc. \$\$ p=2,q=3,a=.2,aend=.5,ainc=.03 gives a graph similar to the \$\$ mathworld.wolfram.com site p=2 q=3 a=.2 \$\$starting value of a aend= .5\$\$end value of a ainc=.03 \$\$ incr value of a - aend/ainc=number of individual spirographs \$\$ overlaid on one another inc=5 \$\$the t increment-controls the smoothness of the curve \$\$ There is no checking of when the loop closes \$\$ you will have to adjust endt manually endt=2*360 \$\$ endt/inc =number of lines of g-code or dxf entities per graph scl= 1 \$\$use this variable to scale the output rot=0 \$\$use this variable to rotate the output xtrans=0 \$\$x and y locations of center of graph ytrans=0 \$\$\$\$\$\$\$\$\$\$\$\$\$\$\$\$\$\$\$\$\$\$\$\$\$\$\$\$\$\$\$\$\$\$\$\$\$\$\$\$\$\$\$\$\$\$\$\$\$\$\$\$\$\$\$\$\$\$\$\$\$\$\$\$\$\$ m=(q-p)/q n=(q-p)/p x0=cosf(theta) y0=sinf(theta) mat1=matrix/scale,scl mat2=matrix/xyrot,rot mat3=matrix/mat2,mat1 mat4=matrix/transl,xtrans,ytrans mat5=matrix/mat4,mat3 rapid tracut/mat5 goto/(x0*(m*cosf(t)+a*cosf(n*t))-y0*(m*sinf(t)-a*sinf(n*t))),\$ (y0*(m*cosf(t)+a*cosf(n*t))+x0*(m*sinf(t)-a*sinf(n*t))),(.1/scl) godlta/0,0,(-.11/scl) loopst agn) x=x0*(m*cosf(t)+a*cosf(n*t))-y0*(m*sinf(t)-a*sinf(n*t)) y=y0*(m*cosf(t)+a*cosf(n*t))+x0*(m*sinf(t)-a*sinf(n*t)) goto/x,y,(-.01/scl) t=t+inc if(endt-t)quit,quit,agn quit)a=a+ainc t=0 rapid godlta/0,0,(.11/scl) rapid goto/(x0*(m*cosf(t)+a*cosf(n*t))-y0*(m*sinf(t)-a*sinf(n*t))),\$ (y0*(m*cosf(t)+a*cosf(n*t))+x0*(m*sinf(t)-a*sinf(n*t))),(.1/scl) if(aend-a)quit2,agn,agn quit2) loopnd tracut/nomore fini