code for cycloid function and diagrams

> putawheel:=proc(pt,rad,txt,txtshift,size) local dsk,text:
dsk:=plottools[disk](pt,rad,color=yellow):
text:=plots[textplot]([pt[1]+3*txtshift*rad,pt[2]+txtshift*rad,txt],font=[TIMES,BOLD,size],align=BELOW):
plots[display]({dsk,text},scaling=constrained):end:

> arg:=proc(t) local tmp:
tmp:=t/(2*Pi):
tmp:=evalf(2*Pi*(tmp-trunc(tmp))) end:

> path:=d->plot([t-sin(t),1-cos(t),t=0..d],thickness=3):
pbble:=t->putaball([t-sin(t),1-cos(t)],.1,` `,12):
cntr:=t->putaball([t,1],.1,` `,12):
arrw:=t->circarr([t,1],[t,.3],-t,`theta`,12,.9,blue):

> rad:=t->plot([[t,1],[t,.15]],style=line,linestyle=3,color=brown,thickness=3):
spoke:=t->plot([[t-sin(t),1-cos(t)],[t,1]],thickness=3):

> wheelnotxt:=t->putawheel([t*1.,1.],1,` `,.3,14):
markangle:=proc(t,size) local tmp,strng:
tmp:=trunc(10*evalf(t*180.0/Pi))*.1:
tmp:=convert(tmp,string):
strng:=cat(`theta = `,tmp,` degrees`):
plots[textplot]([t,3,strng],font=[TIMES,BOLD,14]):
end:

> pie:=t->plots[display](plottools[pieslice]([t,1],1,3*Pi/2..3*Pi/2-arg(t)),color=green):

> origin:=plots[textplot]([0,0,O],font=[TIMES,BOLD,16],
align=BELOW):
cycloid:=t->plots[display]([arrw(t),pbble(t),cntr(t),path(2*Pi+Pi/2),rad(t),whel(t),spoke(t),origin],xtickmarks=[t],ytickmarks=[],scaling=constrained,labels=[`theta`,` `],labelfont=[TIMES,BOLD,16],axesfont=[TIMES,BOLD,16]):

> cycloid2:=(t,d)->plots[display]([pbble(t),path(d),pie(t),wheelnotxt(t),origin,markangle(t,4*Pi)],xtickmarks=[t],ytickmarks=[],axesfont=[TIMES,BOLD,16],labels=[`theta`,` `],labelfont=[TIMES,BOLD,16],scaling=constrained):

> cycloidmovie:=NULL: for i from 0 to 20 do
tmp:=(7*i/20):
cycloidmovie:=cycloidmovie,cycloid2(tmp,12):od:

> plots[display]([cycloidmovie],scaling=constrained,insequence=true);