# Direction Fields # Sarah Jones & Lindsay Turner # # ################################## # # Header For All Maplets restart: with(Maplets[Elements]):with(Maplets[Tools]): StartEngine(); randomize(): lightorange:="#FFB300": lightcyan:="#DDFFFF": lightblue:="#CFCFFF": lightgreen:="#CCFFCC": darkgreen:="#00C000": ColorBkgd:=wheat: ColorDefaultMenu:=lightcyan: ColorHelpMenu:=lightorange: ColorFileMenu:=pink: ColorFooter:=lightcyan: ColorNewButton:=magenta: # or Make, Save, Enter Problem ColorReturnButton:=magenta: ColorCloseButton:=pink: # or Quit, Clear, Reset, Cancel ColorHintButton:=lightorange: # or Syntax ColorPrevButton:=turquoise: # or Update ColorEnterButton:=turquoise: ColorSimplifyButton:=lightorange: ColorCheckButton:=green: ColorShowButton:=lightorange: ColorPlotButton:=gold: ColorPlotButtonFrgd:=black: ColorPlotFrame:=gold: ColorTableBkgd:=lightgreen: ColorCalculatorBkgd:=gold: ColorBlackBox:=black: ColorBlackBoxFrgd:=yellow: ColorMessage:=white: ColorMessageFrgd:=black: ColorInput:=turquoise: ColorInputFrgd:=black: ColorCorrect:=green: ColorCorrectFrgd:=black: ColorIncorrect:=red: ColorIncorrectFrgd:=white: ColorWarning:=yellow: ColorWarningFrgd:=black: ColorShow:=lightorange: ColorShowFrgd:=black: ColorHint:=lightorange: ColorHintFrgd:=black: # or Info, Syntax ColorDisable:=wheat: ColorDisableFrgd:=black: FontFooter:=Font("helvetica",10): FontSymbol:=Font("symbol",12): FontBig:=Font("times",20): LIBLogo:=cat(libname,"/M4C/M4C.png"): Logo:="M4C.png": #LIBLogo:=cat(libname,"/M4C/WebALT_logo.png"): #Logo:="WebALT_logo.png": # ################################## # # Template Translation Table For All Maplets TEXTLprogrammers:= "Programmers: D.B. Meade & P.B. Yasskin": TEXTLcopyright:= "© Copyright: Maplets for Calculus 2006-10": #"© Copyright: WebALT 2006-07": TEXTLversion:= "M4C v1.3 July 2010": TEXTBQuit:= "Quit": TEXTBClose:= "Close": TEXTBCheck:= "Check": TEXTBShow:= "Show": TEXTBShowAll:= "Show All Steps": TEXTBCheckAns:= "Check Answer": TEXTBShowAns:= "Show Answer": TEXTBInstructions:= "Instructions": TEXTBHint:= "Hint": TEXTBHints:= "Hints": TEXTBSyntax:= "Syntax": TEXTBHintSyntax:= "Hints and Syntax": TEXTBPrev:= "Preview": TEXTBUpdate:= "Update": TEXTBDerivation:= "Derivation": TEXTBNewProblem:= "New Problem": TEXTBNewFunction:= "New Function": TEXTBNewGraph:= "New Graph": TEXTBNewEquation:= "New Equation": TEXTBNewLimit:= "New Limit": TEXTBNewDerivative:= "New Derivative": TEXTBNewIntegral:= "New Integral": TEXTBNewSequence:= "New Sequence": TEXTBNewSeries:= "New Series": TEXTBNewDiffEq:= "New Differential Equation": TEXTBNewCurve:= "New Curve": TEXTBEnterProblem:= "Enter Problem": TEXTBEnterFunction:= "Enter Function": TEXTBEnterGraph:= "Enter Graph": TEXTBEnterEquation:= "Enter Equation": TEXTBEnterLimit:= "Enter Limit": TEXTBEnterDerivative:= "Enter Derivative": TEXTBEnterIntegral:= "Enter Integral": TEXTBEnterSequence:= "Enter Sequence": TEXTBEnterSeries:= "Enter Series": TEXTBEnterDiffEq:= "Enter Differential Equation": TEXTBMake:= "Modify or Make Your Own Problem": TEXTBSaveClose:= "Save Problem and Close": TEXTBAskQuestion:= "Ask Question": TEXTBNextQuestion:= "Next Question": TEXTBHowtoAnswer:= "How to Answer": TEXTBEnter:= "Enter": TEXTBOK:= "OK": TEXTBAccept:= "Accept": TEXTBReturn:= "Return": TEXTBClear:= "Clear": TEXTBClearSelections:= "Clear Selections": TEXTBClearAll:= "Clear All Steps": TEXTBReset:= "Reset": TEXTBRestart:= "Restart": TEXTBCancel:= "Cancel": TEXTBPlot:= "Plot": TEXTBPlotIt:= "Plot It": TEXTBAnimate:= "Animate": TEXTBPlay:= "Play": TEXTBPause:= "Pause": TEXTBForward:= "Forward": TEXTBReverse:= "Reverse": TEXTBStep:= "Step": TEXTBUpdatePlot:= "Update Plot": TEXTBZoomIn:= "Zoom In": TEXTBZoomOut:= "Zoom Out": TEXTBPlotSetup:= "Plot Setup": TEXTBRefresh:= "Refresh": TEXTBCalculate:= "Calculate": TEXTBSimplify:= "Simplify": TEXTBFactor:= "Factor": TEXTBExpand:= "Expand": TEXTBNormalize:= "Normalize": TEXTBCombine:= "Combine": TEXTBRationalize:= "Rationalize": TEXTBSort:= "Sort": TEXTBDecimal:= "Decimal": TEXTBExact:= "Exact": TEXTCorrect:= " correct ": TEXTIncorrect:= "incorrect": TEXTAlmost:= " almost ": TEXTWarning:= " warning ": TEXTShown:= " shown ": TEXTSlower:= "Slower": TEXTFaster:= "Faster": TEXTEnterFormula:= " Enter Formula:": TEXTEvaluate:= " Evaluate:": TEXTApproximate:= " Approximate:": TEXTand:= " and ": TEXTor:= " or ": TEXTThus:= " Thus ": TEXTSo:= " So ": TEXTType:= " Type ": TEXTfor:= " for ": TEXTat:= " at ": TEXTorcheck:= " or check: ": TEXTvertical:= "vertical": TEXThorizontal:= "horizontal": TEXTleft:= "left": TEXTright:= "right": TEXTless:= "less": TEXTgreater:= "greater": TEXTCBDNE:= "does not exist": TEXTCBNone:= "None": TEXTCB11scaling:= "1-1 scaling": TEXTdefault:= " default ": TEXTCBDoNotShow:= "Do not show this window again.": TEXTRBNumeric:= "Numeric": TEXTRBSymbolic:= "Symbolic": TEXTRBTrue:= "True": TEXTRBFalse:= "False": TEXTRBT:= "T": TEXTRBF:= "F": TEXTRBOn:= "On": TEXTRBOff:= "Off": TEXTRed:= "Red": TEXTGreen:= "Green": TEXTBlue:= "Blue": TEXTCyan:= "Cyan": TEXTMagenta:= "Magenta": TEXTYellow:= "Yellow": TEXTRedR:= "R": TEXTGreenG:= "G": TEXTBlueB:= "B": TEXTRBPlot1:= "Plot # 1": TEXTRBPlot2:= "Plot # 2": TEXTRBPlot3:= "Plot # 3": TEXTRBPlot4:= "Plot # 4": TEXTRBPlot5:= "Plot # 5": TEXTRBPlot6:= "Plot # 6": TEXTRBconverge:= "converge": TEXTRBdiverge:= "diverge": TEXTRBconverges:= "converges": TEXTRBdiverges:= "diverges": TEXTRBdiverges2:= "diverges ": TEXTRBconvergent:= "Convergent": TEXTRBdivergent:= "Divergent": TEXTtitlePROBLEM:= "Modify or Make Your Own Problem": TEXTtitlePREVIEW:= "Preview": TEXTtitleHINT:= "Hint": TEXTtitleSYNTAX:= "Syntax": TEXTtitlePlotSetup:= "Plot Setup": TEXTCapGoal:= "Goal:": TEXTCapProbStat:= "Problem Statement:": TEXTCapSyntaxTutorial:= "Syntax Tutorial:": TEXTCapEnter:= "Enter:": TEXTCapSpecify:= "Specify:": TEXTCapTrueFalse:= "True or False?": TEXTCapCalculator:= "Calculator": TEXTCapPlot:= "Plot": TEXTCapLegend:= "Legend": TEXTCapEvaluate:= "Evaluate:": TEXTCapDataTable:= "Data Table": TEXTCapVis:= "Visualization": TEXTCapAnim:= "Animation": TEXTCapPreviewer:= "Previewer": TEXTCapHorRng:= "Horizontal Range:": TEXTxmin:= "xmin =": TEXTxmax:= "xmax =": TEXTCapVertRng:= "Vertical Range:": TEXTymin:= "ymin =": TEXTymax:= "ymax =": TEXTPlotWait:= #Use ColorHint " Please be patient while the plot is generated.": TEXTAnimWait:= " Please be patient while the animation is generated.": TEXTRotatePlot:= " You may rotate the plot with your mouse.": TEXTreplyNoCheck:= " You must enter an expression to be checked.": TEXTreplyNoCheckBoth:= " You must answer both questions before checking.": TEXTreplyNoChecks:= " You must answer all %a questions before checking.": TEXTreplyNoPrev:= " You must enter an expression to be previewed.": TEXTreplyNoSimplify:= " You must enter an expression to be simplified.": TEXTreplyNoFactor:= " You must enter an expression to be factored.": TEXTreplyNoExpand:= " You must enter an expression to be expanded.": TEXTreplyNoNormalize:= " You must enter an expression to be normalized.": TEXTreplyNoModify:= " You must enter an expression to be modified.": TEXTreplyNoPlot:= " Please select a plot.": TEXTreplyNoSelection:= " Please select an answer.": TEXTreplyNoSaveProblem:= " You must fill in all the boxes before saving the problem.": TEXTreplyNoSaveSettings:= " You must fill in all the boxes before saving the settings.": TEXTreplyNoSlider:= " Set the slider to a number between %a and %a": TEXTreplySideEqWrong:= " The %a side of your equation is wrong.": TEXTreplyBothSideEqWrong:= " Both sides of your equation are wrong.": TEXTreplySideIneqWrong:= " The %a side of your inequality is wrong.": TEXTreplyBothSideIneqWrong:= " Both sides of your inequality are wrong.": TEXTreplyNoConst:= " You forgot to add a constant of integration.": TEXTreplyManyConst:= " Your answer should have only one constant of integration.": TEXTreplyMinusErr:= " You have a minus sign error.": DNEset:= {"", undefined, Undefined, UNDEFINED, divergent, Divergent, DIVERGENT, diverges, Diverges, DIVERGES, dne, DNE, doesnotexist, DoesNotExist}: TEXTM_File:= "File": TEXTM_Fns:= "Functions": TEXTCBMI_polygen:= "Polynomials (Generalized)": TEXTCBMI_exp:= "Exponentials": TEXTCBMI_log:= "Logarithms": TEXTCBMI_trig:= "Trigonometric": TEXTCBMI_invtrig:= "Inverse Trigonometric": TEXTCBMI_hyper:= "Hyperbolic": TEXTCBMI_invhyper:= "Inverse Hyperbolic": TEXTCBMI_simpsubst:= "Allow Simple Substitutions": TEXTM_Rules:= "Rules": TEXTCBMI_prod:= "Product Rule": TEXTCBMI_quot:= "Quotient Rule": TEXTCBMI_power:= "Power Rule": TEXTCBMI_chain:= "Chain Rule": TEXTM_Methods:= "Methods": TEXTCBMI_subst:= "Substitution": TEXTCBMI_parts:= "Integration by Parts": TEXTCBMI_trigpow:= "Trigonometric Powers": TEXTCBMI_trigsubst:= "Trigonometric Substitution": TEXTCBMI_trigident:= "Trigonometric Identity": TEXTCBMI_parfrac:= "Partial Fractions": TEXTCBMI_impfrac:= "Improper Fraction": TEXTRBproper:= "only proper integrals": TEXTRBimproper:= "allow improper integrals": TEXTM_RulesProb:= "Rules per Problem": TEXTreply_manyrules:= " Problems which involve too many rules tend to become rather messy.": TEXTM_MaxTerms:= "Max # Terms": TEXTreply_manyterms:= " Problems with large numbers of terms tend to become rather messy.": TEXTM_TermsPoly:= "Terms in Polynomial": TEXTM_PowerProp:= "Power Properties": TEXTCBMI_neg:= "Allow Negatives": TEXTCBMI_frac:= "Allow Fractions": TEXTreply_largepower:= " Problems with large degree polynomials tend to become rather messy.": TEXTM_Help:= "Help": TEXTmenu_start:= "Getting Started": TEXTmenu_custom:= "Customized Problems": TEXTmenu_manip:= "Manipulating Functions": TEXTmenu_about:= "About this maplet": great:=[ " Bullseye.", " Right on the mark.", " Great.", " That's absolutely right.", " Awesome. You're unstoppable.", " Correct.", " WOW, nailed that one.", " You got it!", " YES! Right on.", " Way to go.", " Don't stop now.", " I knew you could do it!", " Perfect. You're unstoppable.", " Radical Dude.", " Power house.", " Sweet! Keep on Rockin'.", " You rock!", " You got those mad skills.", " Awesome!", " Wowzers! That was great!", " Awesome man!", " Good job! You really know what you are doing.", " You're awesome kid.", " Tearing it up.", " Right on the money.", " High Five!!!!!", " Cool Beans.", " What a nerd!", " You're so money.", " You're a genius.", " You hit the nail on the head.", " Excellent!", " If I had a cookie, I'd give it to you.", " You're a winner.", " That's a winner.", " Whoop! Way to go.", " That's the way, ah ha ah ha, I like it.", " Oh yeah!", " You're the bomb!", " That was fantastic!", " Oh Snap!", NULL ]: nextgeneric:=[ " Keep it up.", " Keep going.", NULL ]: nextprob:=[ " On to the next problem.", " Try another problem.", " You're ready for another problem.", NULL ]: nextquest:=[ " On to the next question.", " Try another question.", " You're ready for another question.", NULL ]: nextpart:=[ " On to the next part.", " Try another part.", " You're ready for another part.", NULL ]: nextstep:=[ " On to the next step.", " Try another step.", " You're ready for another step.", NULL ]: nexteq:=[ " On to the next equation.", " Try another equation.", " Solve another equation.", " You're ready for another equation.", NULL ]: nextfn:=[ " On to the next function.", " Try another function.", " You're ready for another function.", NULL ]: nextlim:=[ " On to the next limit.", " Try another limit.", " Compute another limit.", " You're ready for another limit.", " Find another limit.", NULL ]: nextderiv:=[ " On to the next derivative.", " Try another derivative.", " Compute another derivative.", " You're ready for another derivative.", " Differentiate another function.", NULL ]: nextinteg:=[ " On to the next integral.", " Try another integral.", " Compute another integral.", " You're ready for another integral.", " Integrate another function.", NULL ]: nextdiffeq:=[ " On to the next differential equation.", " Try another differential equation.", " You're ready for another differential equation.", " Analyze another differential equation.", NULL ]: nextseq:=[ " On to the next sequence.", " Try another sequence.", " Find the limit of another sequence.", " You're ready for another sequence.", NULL ]: nextser:=[ " On to the next series.", " Try another series.", " Sum another series.", " You're ready for another series.", NULL ]: almost:=[ " Close.", " Oh so close.", " Close call. ", " Near miss.", " Not quite good enough for government work.", " Ooooh...close.", " Yikes! Really close. You'll get it next time.", " Close, but no cigar.", " Slightly off.", " Off by a hair.", " Almost there.", " Almost got it.", NULL ]: sorry:=[ " Sorry, that's not right.", " Nope, but don't give up.", " Not quite, it's a little off.", " Bummer, thought you would get it this time.", " If you need help, please ask a human.", " I don't know where you went wrong.", " Sorry, killer problem.", " No, but don't blow it off.", " D'oh!", " That's whack.", " Thought you would get it this time.", " Nice try, but your answer is wrong.", " Ask your neighbor for help.", " Brutal kid.", " That won't fly.", " So close and yet so far.", " So, that was just practice.", " A swing and a miss.", " Better luck next time.", " Oops.", " Tilt. Play again.", " I know you can do better.", " Sorry Charlie.", " Tisk, tisk. It's a tough one.", " It takes a lot of wrongs to make a right.", " Even Einstein didn't get everything right.", " Today's not your lucky day.", " Don't quit your day job.", " You're colder than a polar bear's toenail.", op(almost), NULL ]: trygeneric:=[ " Fix your answer and check it again.", " Give it another try.", " Try again.", " Please try again.", NULL ]: tryhint:=[ " Try the hints and answer again.", " Read the hints and try again.", " Study the hints and answer again.", NULL ]: tryhelp:=[ " Try the Help menu and answer again.", " Look at the Help menu and try again.", NULL ]: showgeneric:=[ " OK That's just practice. But try doing it yourself.", " That's fine for practice. Try doing it yourself.", " Think about it and enter an answer yourself.", " Next time, compute an answer yourself.", " So that was practice. Try doing it yourself.", NULL ]: showhint:=[ " Next time, try the hints.", " Read the hints and enter an answer yourself.", NULL ]: showhelp:=[ " Next time, read the Help menu.", " Read the Help and enter an answer yourself.", NULL ]: # ################################## # Procs for all maplets. GetVersion:=proc() local S, S1, S3, S4; options `Copyright 2009-10, Philip B. Yasskin and Douglas B. Meade, Maplets for Calculus`; uses StringTools; S:=interface(version); S:=map( Trim, Split( S, "," ) ); S1:=Split(S[1], " " ); S3:=Split(S[3], " " ); S4:=Split(S[-1], " " ); sprintf("%s (%s)", S[2],S3[-1]); end proc: # ################################## # # Customize For Each Maplets with(plots):with(plottools): with(DEtools):with(combinat,randperm): #with(RandomTools): #alias(e=exp(1)): nextlocal:=[ " Find another direction field.", " Identify another slope field.", " You're ready for another direction field.", NULL ]: trylocal:=[ NULL ]: showlocal:=[ NULL ]: nexts1:=[ #Keep what is appropriate. This is for all but the last check. op(nextgeneric), op(nextprob), op(nextquest), op(nextpart), op(nextstep), op(nextlocal), NULL ]: nexts2:=[ #Keep what is appropriate. This is for the last check. op(nextgeneric), op(nextprob), op(nextquest), #op(nexteq), #op(nextfn), #op(nextlim), #op(nextderiv), #op(nextinteg), op(nextdiffeq), #op(nextseq), #op(nextser), op(nextlocal), NULL ]: trys:=[ #Keep what is appropriate. op(trygeneric), op(tryhint), #op(tryhelp), op(trylocal), NULL ]: shows:=[ #Keep what is appropriate. op(showgeneric), op(showhint), #op(showhelp), op(showlocal), NULL ]: randgreat:=rand(1..nops(great)): randnext1:=rand(1..nops(nexts1)): randnext2:=rand(1..nops(nexts2)): randalmost:=rand(1..nops(almost)): randsorry:=rand(1..nops(sorry)): randtry:=rand(1..nops(trys)): randshow:=rand(1..nops(shows)): # ################################## # # Put Translation Table For Specfic Maplet Here TEXTLasstprogrammer:= "Assistant Programmers: Sarah Jones & Lindsay Turner": TEXTtitleMAIN:= "Direction Fields": TEXTFindDirFld:= "Find the direction field of the differential equation:": TEXTCapSelectPlot:= "Select a Plot": TEXTHintplot:= " Where is the slope zero, positive, negative and infinity?\n What is the sign of the slope on each axis, in each quadrant?": # ################################## Slopes:=[ x+y, x-y, y-x, -x-y, x^2+y, x^2-y, y-x^2, -x^2-y, x+y^2, x-y^2, y^2-x, -x-y^2, x^2+y^2, x^2-y^2, y^2-x^2, -x^2-y^2, x*y, x/y, y/x, 1/x/y, -x*y, -x/y, -y/x, -1/x/y, x^2*y, x^2/y, y/x^2, 1/x^2/y, -x^2*y, -x^2/y, -y/x^2, -1/x^2/y, x*y^2, x/y^2, y^2/x, 1/x/y^2, -x*y^2, -x/y^2, -y^2/x, -1/x/y^2, NULL ]: plot0:=plot(0,x=-3..3,y=-3..3): New_Problem:=proc() global ans; local rand_Slopes, rand_ans, Slope, plot1, plot2, plot3, plot4, i; options `Copyright 2006-10, Philip B. Yasskin and Douglas B. Meade, Maplets for Calculus`; rand_Slopes:=randperm(nops(Slopes)): rand_ans:=randperm(4); for i from 1 to 4 do Slope[i]:=Slopes[rand_Slopes[i]]; if rand_ans[i]=1 then ans:=i; end if; end do; Set(MMLequation(value)=MathML[Export](diff(y(x),x)=Slope[1])); plot1:=DEplot(diff(y(x),x)=subs(y=y(x),Slope[rand_ans[1]]),y(x),x=-3..3,y=-3..3); plot2:=DEplot(diff(y(x),x)=subs(y=y(x),Slope[rand_ans[2]]),y(x),x=-3..3,y=-3..3); plot3:=DEplot(diff(y(x),x)=subs(y=y(x),Slope[rand_ans[3]]),y(x),x=-3..3,y=-3..3); plot4:=DEplot(diff(y(x),x)=subs(y=y(x),Slope[rand_ans[4]]),y(x),x=-3..3,y=-3..3); Set(PL1=plot1); Set(PL2=plot2); Set(PL3=plot3); Set(PL4=plot4); Set(RBplot1=false, RBplot1(enabled)=true, RBplot1(background)=ColorPlotButton, RBplot1(foreground)=ColorPlotButtonFrgd); Set(RBplot2=false, RBplot2(enabled)=true, RBplot2(background)=ColorPlotButton, RBplot2(foreground)=ColorPlotButtonFrgd); Set(RBplot3=false, RBplot3(enabled)=true, RBplot3(background)=ColorPlotButton, RBplot3(foreground)=ColorPlotButtonFrgd); Set(RBplot4=false, RBplot4(enabled)=true, RBplot4(background)=ColorPlotButton, RBplot4(foreground)=ColorPlotButtonFrgd); Set(BplotHnt(enabled)=true, BplotHnt(background)=ColorHintButton); Set(BplotCk(enabled)=true, BplotCk(background)=ColorCheckButton); Set(MRplot="", MRplot(background)=ColorMessage): Set(BplotSh(enabled)=true, BplotSh(background)=ColorShowButton); Set(reply="", reply(background)=ColorMessage): end proc: hint_plot:=proc() options `Copyright 2006-10, Philip B. Yasskin and Douglas B. Meade, Maplets for Calculus`; Set(reply=TEXTHintplot, reply(background)=ColorShow, reply(foreground)=ColorShowFrgd); end proc: check_plot:=proc() global ans; local userans; options `Copyright 2006-10, Philip B. Yasskin and Douglas B. Meade, Maplets for Calculus`; userans:=0; if Get(RBplot1) then userans:=1 end if; if Get(RBplot2) then userans:=2 end if; if Get(RBplot3) then userans:=3 end if; if Get(RBplot4) then userans:=4 end if; if userans=0 then Set(MRplot=TEXTWarning, MRplot(background)=ColorWarning, MRplot(foreground)=ColorWarningFrgd); Set(reply=TEXTreplyNoPlot, reply(background)=ColorWarning, reply(foreground)=ColorWarningFrgd) elif userans=ans then Set(MRplot=TEXTCorrect, MRplot(background)=ColorCorrect, MRplot(foreground)=ColorCorrectFrgd); Set(reply=cat(great[randgreat()],nexts2[randnext2()]), reply(background)=ColorCorrect, reply(foreground)=ColorCorrectFrgd); else Set(MRplot=TEXTIncorrect, MRplot(background)=ColorIncorrect, MRplot(foreground)=ColorIncorrectFrgd); Set(reply=cat(sorry[randsorry()],trys[randtry()]), reply(background)=ColorIncorrect, reply(foreground)=ColorIncorrectFrgd); end if; end proc: show_plot:=proc() global ans; options `Copyright 2006-10, Philip B. Yasskin and Douglas B. Meade, Maplets for Calculus`; Set(RBplot||ans=true); Set(MRplot=TEXTShown, MRplot(background)=ColorShow, MRplot(foreground)=ColorShowFrgd); Set(reply=shows[randshow()], reply(background)=ColorShow, reply(foreground)=ColorShowFrgd); end proc: DirectionFields:=Maplet(onstartup=RunWindow(MAIN), Window[MAIN](title=TEXTtitleMAIN, defaultbutton=BplotHnt, [ halign=none, background=ColorBkgd, inset=0, spacing=0, [ halign=none, background=ColorBkgd, Button(TEXTBNewDiffEq, Evaluate(function="New_Problem"), background=ColorNewButton), HorizontalGlue(), Button(TEXTBQuit, Shutdown(), background=ColorCloseButton) ], [ halign=none, background=ColorBkgd, border=true, caption=TEXTCapProbStat, TEXTFindDirFld, MathMLViewer[MMLequation](value=MathML[Export](diff(y(x),x)=F(x,y)), width=300, height=50) ], [ halign=none, background=ColorBkgd, inset=0, spacing=0, border=true, caption=TEXTCapSelectPlot, [ halign=none, valign=none, background=ColorBkgd, inset=0, spacing=0, [ background=ColorPlotFrame, Plotter[PL1](plot0, width=200, height=200) ], RadioButton[RBplot1](TEXTRBPlot1, value=false, group=BG1, enabled=false, background=ColorDisable, foreground=ColorPlotButtonFrgd) ], [ halign=none, valign=none, background=ColorBkgd, inset=0, spacing=0, [ background=ColorPlotFrame, Plotter[PL2](plot0, width=200, height=200) ], RadioButton[RBplot2](TEXTRBPlot2, value=false, group=BG1, enabled=false, background=ColorDisable, foreground=ColorPlotButtonFrgd) ], [ halign=none, valign=none, background=ColorBkgd, inset=0, spacing=0, [ background=ColorPlotFrame, Plotter[PL3](plot0, width=200, height=200) ], RadioButton[RBplot3](TEXTRBPlot3, value=false, group=BG1, enabled=false, background=ColorDisable, foreground=ColorPlotButtonFrgd) ], [ halign=none, valign=none, background=ColorBkgd, inset=0, spacing=0, [ background=ColorPlotFrame, Plotter[PL4](plot0, width=200, height=200) ], RadioButton[RBplot4](TEXTRBPlot4, value=false, group=BG1, enabled=false, background=ColorDisable, foreground=ColorPlotButtonFrgd) ] ], [ halign=none, background=ColorBkgd, Button[BplotHnt](TEXTBHint, Evaluate(function="hint_plot"), enabled=false, background=ColorDisable), Button[BplotCk](TEXTBCheck,Evaluate(function="check_plot"), enabled=false, background=ColorDisable), TextField[MRplot](width=6, editable=false, background=ColorMessage), Button[BplotSh](TEXTBShow, Evaluate(function="show_plot"), enabled=false, background=ColorDisable), TextBox[reply](width=60, height=2, editable=false, background=ColorMessage), Label(Image(Logo)), Label(Image(LIBLogo)) ], BoxColumn( halign=none, background=ColorFooter, inset=0, spacing=0, [ background=ColorFooter, inset=0, spacing=0, Label(TEXTLprogrammers, font=FontFooter), HorizontalGlue(), Label(TEXTLcopyright, font=FontFooter), HorizontalGlue(), Label(TEXTLversion, font=FontFooter) ], [ background=ColorFooter, inset=0, spacing=0, Label(TEXTLasstprogrammer, font=FontFooter), HorizontalGlue(), Label(GetVersion(), font=FontFooter) ] ) ] ), ButtonGroup[BG1]() ): Maplets[Display](DirectionFields);