restart: with(Maplets[Tools]): with(Maplets[Elements]): with(plots): StartEngine(); PlotTan:=Maplet(onstartup = RunWindow(MAIN), Window[MAIN](title="Plot Tangent Demo", [ ["Type in a function of x, and an interval a..b for x."], ["Function:", TextField[func](width=25)], ["Interval:", TextField[interv](width=25)], [ Button("Plot It", onclick=A1), Button("Good Bye", Shutdown())] ] ), Window[PlotIt](title="The Plot", [ [Plotter[myplot](width=300, height=300)], [ "Add the tangent line at the point x= ", TextField[point](width=5)], [ Button("Plot It", Evaluate(function = "plottan")), Button("Good Bye", CloseWindow(PlotIt))] ] ), Action[A1](RunWindow(PlotIt), Evaluate(function = "plotfunc")) ): plotfunc:=proc() global userfunc, userinterv, p1; userfunc:=Get(thismaplet,func::anything): userinterv:=Get(thismaplet,interv::range): p1:=plot(userfunc, x=userinterv, thickness=5, color=green); Set(myplot=p1) end proc: plottan:=proc() global userfunc, userinterv, userpoint, p1, p2, duserfunc, tanfunc; userpoint:=Get(thismaplet,point::realcons): duserfunc:=diff(userfunc,x); tanfunc:=subs(x=userpoint,userfunc)+subs(x=userpoint,duserfunc)*(x-userpoint); p2:=plot(tanfunc, x=userinterv, thickness=10, color=blue); Set(myplot=display(p1,p2)) end proc: Maplets[Display]( PlotTan );