with(Maplets[Elements]): with(plots): pl[0]:= display3d([spacecurve( [cos(t), 1 + sin(t), 0], t = 0 .. 2*Pi, numpoints = 40, color=black), polygonplot3d({[0, 0, 0]}, color = red)]): for i from 1 to 50 do cycloid[i] := spacecurve([ t - sin(t), 1 - cos(t), 0], t = 0 .. 8*Pi*i/50, numpoints = 2*i + 1, color = red): dot1[i]:= spacecurve(subs(t = 8*Pi*i/50,[ t - sin(t) + 0.1*cos(s), 1 - cos(t) + 0.1*sin(s), 0] ), s = 0..2*Pi, numpoints = 40, color = green): dot2[i]:= spacecurve(subs(t = 8*Pi*i/50,[ t - sin(t) + 0.2*cos(s), 1 - cos(t) + 0.2*sin(s), 0] ), s = 0..2*Pi, numpoints = 40, color = green): wheel[i] := spacecurve(subs(t = 8*Pi*i/50,[ t + cos(s), 1 + sin(s), 0] ), s = 0..2*Pi, numpoints = 40, color = black): pl[i] := display3d([cycloid[i], wheel[i], dot1[i], dot2[i]], scaling=constrained): end do: p := display3d(seq(pl[i], i=0..50), insequence=true, scaling='CONSTRAINED', orientation=[-90,0]): animator := Maplet( Window( 'title' = "Cycloid Movie", [ Plotter[P](p, continuous=false, height = 300, width = 300), [Button("to start",SetOption(P('to_start')=true)), Button("play",SetOption(P('play')=true)), Button("stop",SetOption(P('`stop`')=true)), Button("pause",SetOption(P('pause')=true)), Button("to end",SetOption(P('to_end')=true))], [ Button("backwards",SetOption(P('frame_backwards')=true)), Button("forward",SetOption(P('frame_forward')=true)) ], [ CheckBox[CONTINUOUS](value=false, onchange=SetOption(target=P, `option`='continuous', Argument(CONTINUOUS))),"continuous" , CheckBox[CYCLIC](value=false, onchange=SetOption(target=P, `option`='cyclic', Argument(CYCLIC))), "cyclic" ], [Delay], [ "fast", Slider[DELAY](100..500, 200, onchange=SetOption(target=P, `option`='delay', Argument(DELAY)), filled=true) , slow], Button("Exit",Shutdown()) ])): Maplets:-Display(animator);