***************************************************************************
                   MARK'S MATH PLOTTER - V2.0 - HELP FILE
***************************************************************************
CONTENTS:
I.    NEW FEATURES IN VERSION 2.0
II.   SYSTEM AND USER REQUIREMENTS
III.  BACKGROUND
IV.   INSTRUCTIONS - GENERAL
V.    INSTRUCTIONS - SPECIFIC MODULES REACHED FROM THE MAIN MENU
VI.   EXAMPLES TO TRY
VII.  PRINTING GRAPHS AND SAVING GRAPHS AS IFF FILES
VIII. FILES INCLUDED ON THE ORIGINAL DISK
***************************************************************************



I.   NEW FEATURES IN VERSION 2.0

**** VERSION 2.0 IS MORE THAN  TWICE  AS  POWERFUL  AS ITS PREDECESSOR.  The
parser has been SIGNIFICANTLY EXPANDED so as to recognize 34, rather than 14
mathematical functions.  (SEE LIST IN SECTION IV, PART F)

**** Requesters now come filled in with  default values for the math novice.
Only the  function  has  to  be  entered  to  get  started.    In  addition,
REQUESTERS HAVE MEMORY, that is they always remember their last pass values.
This is handy when you only want to  change  one or two parameters at a time
as you draw.  Every pass now  takes  the  user  immediately  to the function
requester(s).

**** Up to 30 constants per expression are now allowed, rather than 24.

**** I also felt that  eventually  someone  would  want  to enter a function
longer than what would fit  on  one  line,  so  now  function requesters are
either 150 or 225 characters long depending on available screen space.

**** For those of you that know about parsing,  up to 75 tokens and 75 quads
per expression are  now  allowed,  ALLOWING  MORE  COMPLICATED  MATHEMATICAL
EXPRESSIONS.

**** Feeling that 2dgrapher would get  the  most use, I put a graphing speed
requester on 2dgrapher.  Use  it  to  speed  up  the  graphing.  Very little
accuracy will be sacrificed.

**** Some effort was also  put  into  placing  the  triad  on the graph more
accurately in 3dplotter and hidden3dplot.



II.  SYSTEM AND USER REQUIREMENTS

     System requirements include an Amiga with  one megabyte memory minimum.
Software developed under Workbench 1.3.   Compatible with Workbench 2.0 with
HiRes screen 640x200.  A math  coprocessor  or  accelerator chip is optional
and helpful, but not necessary.  Program will multi-task.  Use public domain
utility ScreenX to capture graphs as IFF files.
     User requirements: basic  knowledge  of  function  plotting  in two and
three dimensions; knowledge  of  the  built  in  functions,  and mathematics
beyond algebra.



III. BACKGROUND

     The idea for Mark's MathPlotter came about when I was teaching calculus
at a junior college.  Knowing  the  graphics  capabilities  of  the Amiga, I
decided to use my Amiga  as  an  electronic  chalkboard  to  draw  graphs of
functions that would have  been  nearly  impossible  to draw by hand.    The
computer could be used  in  conjunction  with  the  new calculators that can
graph, since most students can at least  afford the calculators.  Hopefully,
some students would see the advantage of using an Amiga during their college
years and go buy one.

     I looked to see what software was  available  for  the Amiga.  I bought
Doug's Math Aquarium, and examined  True  Basic's  packages, but they lacked
some of the features I  needed  for  teaching,  such  as  drawing  solids of
revolution, graphing polar functions,  etc,  and they were rather expensive.
So, I decided to put my M.A. in Mathematics  and my M.S. in Computer Science
to work and write my own program.  Modules have been continually added since
the original two, 2DGRAPHER and POLAR.  After many years of development (off
and on), I have arrived at the  current  eight modules.  A recursive descent
predictive parser for function parsing,  along with compilation of the code,
has reduced the rendering time considerably.

     Mark's MathPlotter is unique in many  respects.   It has the ability to
zoom in on graphs in the Cartesian  and  polar  planes, which can be used to
find points of intersection  to  6-7  place  accuracy.   It  can  be used to
generate wire framed solids  of  revolution,  a  feature for which one would
probably have to go to a CAD package  to  get.  In the 3d rendering you have
the choice of whether you  want  hidden  surface  removal  or not.  The user
interface is friendly,  with  help  available  for  all  input requester and
default values available  for  most  input  requesters.   Functions  use the
standard BASIC notation which is familiar to many.

     If you are a first time  user  please  read  over  the  instructions to
follow.



IV.  INSTRUCTIONS - GENERAL

SPECIAL NOTE TO CLI USERS:
     You MUST set the stack size to  allow  for  the  static arrays that are
used.  The command I use is 'STACK  32000'.   Do this BEFORE entering one of
'run mpintroV2.0' or 'run  mathplotterV2.0'  which get you into the program.
If you  go lower  than  '32000'  however,  or  you'll  probably  get a guru.
Workbench users will not have to worry  about this as the stack size is read
from the .info files.

ALL USERS:
     To start the program from the  workbench  double click on either of the
icons, 'MPIntroV2.0' or 'MathPlotterV2.0'.  To start it from the CLI type in
either 'run MPIntroV2.0' or 'run  MathPlotterV2.0'  AFTER  setting the stack
size as shown above.

     MPIntroV2.0 has some information screens before going to the main menu.
MathPlotterV2.0 takes you immediately  to  the main menu, from which you can
select one of ten items by clicking once  in the box of your choice with the
left mouse button or hit the key  indicated  in each selection.  There is an
addition help screen on 'What  are  valid  functions?'  which can be reached
from the main menu.

     Each module will begin with a screen  with  input  requesters.  You can
only put in input into a box when the box is  outlined in gold.  Upon module
startup, all requesters  are  filled  in  with  default  values,  except the
function requester. After entering the  function, if you decide some changes
are necessary, you can  randomly  make  changes  to  the various parameters.
After entering the function, you'll see two or more boxes at the bottom.  To
make changes to your input, click on the  left one ('CLICK HERE TO CLEAR AND
REDO INPUT') and then click on a requester  to change its value.  Change the
input, hit enter, and then  click  on  another  requester  if  you have more
changes.  You can continue to select  requesters  in this fashion until your
happy with all  the  values.   By  just  hitting  enter  after  selecting  a
requester, you can retain its previous  value.  When you're satisfied, click
on the right box at the bottom ('CLICK HERE TO CONTINUE AND GRAPH').

     Each requester, except for the  function  requester,  has an associated
default or last pass value.  To use it, just hit enter at the requester.  If
you are making  changes  to  the  data,  the  requesters  will  remember the
previous values it used.   ALL  REQUESTERS  IN  V2.0 NOW REMEMBER THEIR LAST
PASS  VALUES.   UPON  MODULE  START,  ALL  PARAMETERS  ARE  FILLED  IN  WITH
REASONABLE DEFAULTS.  HOWEVER, YOU MUST  AT LEAST ENTER A FUNCTION.  This is
a real time saver if you are redrawing the same graph over and over again.

     Each input requester has help which is  available by hitting the 'HELP'
key when the requester is outlined  in  gold.   A default value is available
for most requesters, except the function requesters, by just hitting 'ENTER'
in the requester.  The default value and well as any special restrictions on
the current input value can be  discovered  by hitting the 'HELP' key.  Each
input requester is expecting you to hit certain keys or it will beep at you.
For instance, there are requesters for positive integers which expect you to
only hit the keys 0-9.  For integers  in  general, you can begin with '-' or
0-9 in the first position, followed by  the keys 0-9.  Floating point (real)
values have the same valid keys as  integers,  with  the addition of the '.'
key.  Function requesters allow you to use all the keys, but if you input an
invalid function you'll  probably  get  an  error  message from the function
parser, and you'll have to start over.

     All requesters allow you to edit your input with the delete, backspace,
right and left arrow  keys,  before  hitting  return  to  move on.  Don't be
afraid to explore with different values.



V.   INSTRUCTIONS - SPECIFIC MODULES REACHED FROM THE MAIN MENU

NOTE: MAIN MENU CHOICES WILL BE INDICATED BESIDE THE MODULE NAME

A.   [1] 2DGRAPHER AND [2] POLAR

     These can be  used  for  drawing  functions  of  one  variable  in  the
rectangular or polar  coordinate  systems  respectively.   Both modules have
similar input requesters which are described below.

UNIT LENGTH:  Unit length refers to  the  number  of pixels for each unit in
the graph.  2DGRAPHER has one for x and y, POLAR has just one but also has a
requester for  increments  which  tells  it  the  number  of degrees between
samplings of the function.  Generally, the lower the number the smoother the
drawing (and slower). (integer, >0)

COORDINATES AT THE CENTER OF THE  SCREEN:   These help position the graph on
the screen.  Most of the time 0,0  will  be fine.  To explore other areas in
the plane, move the center.  A small gold circle indicates the center on the
graph.  In the polar version,  the  center  of  the screen is still given in
rectangular coordinates, not polar (i.e. (1,1) is r=sqr(2), theta=45 degrees
in polar coordinates). (reals)

FUNCTION REQUESTER:   Finally,  a  function  requester  expects  a  function
y=f(x), but don't type in the  'y='  part,  just  the  'f(x)' part.  If your
function is rejected you'll get an error message, and after hitting any key,
you'll be returned to the input screen.

     2dgrapher will also  prompt  you  for  a  graph  speed.   Just  use the
spacebar to select the value (1=slowest,  6=fastest), and then hit return to
start drawing.

     After the graph is drawn, 5 selections appear:

1)  ECHO COORDINATES - hit  1,  then  move  the  mouse  over the graph while
holding down the left button.  Coordinates  of where you're pointing will be
reflected on the screen.  This along with  the zoom feature can allow one to
find the intersection point of two  curves  to  within 6 places of accuracy.
Letting up on the mouse button quits this choice.

2)  ZOOM-IN - use to frame a  portion  of  the  graph to zoom in on.  Hit 2,
then move the mouse to the upper left corner of the area you want to zoom in
on, hold down the left mouse button  and  drag  the box over the graph until
you reach the lower right corner  of  the  area  you wish to zoom in on, and
then release.  It will recalculate the parameters and redraw that portion of
the graph.  The drag box in POLAR is kept in the shape of a square.

3)  ADD A GRAPH - (valid if only one  graph  has been drawn) hit 3, then you
will be prompted to type in a second function to graph.

4)  MAKE CHANGES - Lets you try again.  Erases the chalkboard.

5)  QUIT - Returns to main menu.


B.   [3] ROTATION(ONE) AND [4] ROTATION(TWO)

     These two modules are for drawing wire  frame representations of solids
of revolution (often done in calculus  or  engineering courses).  One or two
functions (depending on the module selected)  of one variable are bound to a
certain finite interval on the x axis.   Then both curves are revolved about
the x axis to generate a solid of revolution.

     The input requesters are:

UNIT LENGTH:  refers to the number of pixels  used per unit in each of the x
and y directions. (integer, >0)

COORDINATES AT THE CENTER OF THE SCREEN:  works the same as in 2dgrapher and
corresponds to  the  coordinates  in  2d  space  (the  xy  plane) before any
revolving is done. (real)

INCREMENT:  the number  of  degrees  the  curve(s)  is(are)  revolved before
it(they) is(are) drawn again. (integer, 0<?<90)

Y-ROTATION:  the number of  degrees  the  y  axis is rotated for viewing; if
this value is zero, the z axis is  coming  out towards the viewer, x axis is
to the right, and the y axis is  up;  a  positive  value rotates about the y
axis clockwise (as one is looking down the y axis towards the origin); hence
a value between 0 and 90 puts  the  viewer  in  the  first octant. (integer,
recommend -180<?<180)

DENSITY:  the number of pixels between  samplings of the function; a smaller
value yields a smoother,  more  accurate  drawing,  but is slower to render.
(integer, >0, recommend 2<?<5)

LOWER AND  UPPER  BOUNDS:   these  are  the  bounds  along  the  x axis that
indicates the interval of consideration. (real)

FUNCTION(S):  in ROTATION(ONE)  there  is  only  one function to revolve; in
ROTATION(TWO) there are two, a lower function (y=g(x)) and an upper function
(y=f(x)) where it is intended  that  g(x)<=f(x)  for  all  x in the interval
selected (this  is  not  a  strict  requirement,  experiment  and  see  what
happens).

     To try again, hit 'y', else hit any key to quit.


C.   [5] 3DPLOTTER AND [6] HIDDEN3DPLOT

     The input requesters are identical for  both of these modules.  In fact
both programs draw functions of two variables  (z=f(x,y)) over a rectangular
field in the xy plane, except that HIDDEN3DPLOT  has hidden surface removal.
Hence, 3DPLOTTER is  faster,  but  the  graphs  are  not  as realistic or as
pretty.  Their input requesters include:

LOWER X AND UPPER X:  these are the lower and upper bounds along the x axis.
(real, lower<upper)

LOWER Y AND UPPER Y:  these are the lower and upper bounds along the y axis.
(real, lower<upper)

SAMPLING RATE: this is a value  which  determines  the  sampling and drawing
density over the field; realistic drawings  need a value at least around 20;
the higher the  value,  the  slower  the  rendering,  but  a  better picture
results; the maximum is 50; the  default  32 is a good compromise. (integer,
0<?<50)

ANGLE OF PROJECTION:  number of degrees  the field will be 'twisted' to give
a 3d effect; turns out  to  be  the  angle  between  the  xy  plane  and the
'camera'. (integer, 0<?<90, recommend 20<?<50)

Z SCALAR FACTOR:  this is  a  factor  that  all  z  values are multiplied by
before drawing; if large z values are expected, make the value <.5; if small
z values are expected, try values >.5; you'll probably have to experiment to
get it just right;  if  its  too  big  funny  graphs  result.  (real,  >0.0,
recommend 0.0<?<.75, start small if you're unsure)

FUNCTION:  enter any valid function of two variables.

     Hit 'r' to retry, or any key to quit and return to the main menu.

NOTE:  For even better rendering of  functions  of two variables, use my new
release, NEW3D, or write me for a copy (address in MPIntroV2.0).


D.   [7] TABLE_XY

     This module generates a table of  function  values for functions of one
variable.  Initially, you'll be ask to click on one of two boxes to indicate
if you want one or two functions at once in the table.

     The first  three  requesters  are  for  X  MINIMUM,  X  MAXIMUM,  and X
INCREMENT.  These three requesters  all  depend on each other, so if you try
to edit one, you'll be placed in the  first  requester.   They all take real
values, and x minimum  should  be  less  than  x  maximum.   Also, if you're
tabulating two functions at once, you're only allowed 400 entries.  Based on
the three values entered,  it  will  check  to  see  if you've exceeded this
limit.  If so, you'll be warned and asked to reenter the values.

     Also, there will be one or two  function  requesters  depending on your
earlier selection.  Enter functions of one variable in each.  This module is
easy to use, so just follow the on screen  prompts.  One side comment, don't
hit the keys too rapidly as  you  page  through  the  table, as the keyboard
buffer will keep the keystrokes and  you  may  page past where you wanted to
look.  If you page past where  you  wanted  to  look,  you'll have to escape
('ESC') and restart (choose 'retry') the tabulation.


E.   [8] TABLE_XYZ

     This module is almost the same as  TABLE_XY,  but only one function can
be handled on screen at a time.  Again,  there are requesters for X MINIMUM,
X MAXIMUM, and X  INCREMENT,  along  with  a  similar  set  for Y MINIMUM, Y
MAXIMUM, and Y INCREMENT.   These  work  the  same as in TABLE_XY.  The only
difference is that there is no restriction on the number of entries that you
can have.

     Finally, there is a requester for a  function  of  two variables.  This
module is easy to use,  so  just  follow  the  on  screen prompts.  One side
comment, don't hit the keys too  rapidly  as  you page through the table, as
the keyboard buffer will keep the keystrokes and you may page past where you
wanted to look.  If you page past  where  you wanted to look, you'll have to
escape ('ESC') and restart the tabulation by hitting 'r' to retry.


F.   [9] or [HELP] HELP AND [Q] QUIT

     The help screen reached  here  tells  the  user  the  valid  constants,
variables,  operators,  and   mathematical  functions  supported  in  Mark's
MathPlotter.  Up to 30 constants per expression  are allowed.  Currently, 34
functions are supported in upper and lower case:

ABS     ACSCH   ASECH   ATANH   CSCH    FIX     LOG     SGN     TAN
ACOS    ACTN    ASIN    COS     CTN     FRAC    RND     SIN     TANH
ACOSH   ACTNH   ASINH   COSH    CTNH    INT     SEC     SINH
ACSC    ASEC    ATAN    CSC     EXP     LN      SECH    SQR


     To exit Mark's MathPlotter, choose [Q] to quit.



VI.  EXAMPLES TO TRY

For those unfamiliar with this software  and/or mathematical functions, here
are some examples to get you  started.   The  values are listed in the order
they appear on the screen starting in the upper left.  Enter the function(s)
first, then go back and change any parameters if needed.

2DGRAPHER:
example) 20, 20, 0, 0, x^3-x; Hit return  to use the default graphing speed.
After this first function is graphed, choose 'add a graph' and graph sin(x);
with both graphs on the screen, try  to  find  the intersection point in the
first quadrant using the zoom-in and echo coordinates features.

POLAR:
example) 40, 45, 0, 0,  sin(2*x);  then  add  the graph sin(3*x); retry with
sin(4*x) and sin(5*x); these graphs  are  known as roses; can you deduct how
many petals are in a rose of the form sin(k*x), based on different values of
k? (hint: consider odd and even values of k separately)

ROTATION(ONE):
example) use all defaults except make unit lengths 20, 20.  Use the function
(f(x)=) cos(x)+1.
example) 20, 20, 0, 0, 45, 30, 3, 0, 6.28,  (f(x)=) sin(x)+1.5 (draws a vase
like object).
example) 20, 20, 0, 0, 30, 45, 3, -2, 2, (f(x)=) x^2+1

ROTATION(TWO):
example) use all defaults.  Let (g(x)=) sqr(x), (f(x)=) 2*sqr(x)
example) use all defaults except change unit lengths to 15, 15 and make the 
upper bound 6.0.  Use the functions (g(x)=) cos(x), (f(x)=) sqr(x)+1.
example) 20, 20, 0, 0, 45, 30, 3, -2, 2, (g(x)=) 1, (f(x)=) 5-x^2
example) 25, 25, 0, 0, 60, 45, 3, -1, 1, (g(x)=) x^2+1, (f(x)=) 3-x^2

3DPLOTTER AND HIDDEN3DPLOT:
example) -3, 3, -3, 3, 40, 30, .25, sin(x^2+y^2) (draws a rippled hat).
example) -3, 3, -3, 3, 35, 35, .2, x^2-y^2  (draws a saddle)

TABLE_XY AND TABLE_XYZ:
Experiment with the above functions.



VII. PRINTING GRAPHS AND SAVING GRAPHS AS IFF FILES

     To print graphs, use the Graphidump  utility  on Workbench, or save the
graph as an IFF file (as described below),  and print out with your favorite
utility.  For those with a standard B&W dot matrix, I recommend setting your
printer preferences  (under  Graphics  1  for  those  with Workbench 1.3) to
Image: negative, Shade: black &  white,  and Threshold: 14 for graphs with a
black background, 11 for graphs with  a  dark green background.  Choose SAVE
or USE for these  settings.   Then  position  the  Graphidump  icon so it is
visible and ready to use  on  the  Workbench.   Now,  draw  the graph in the
program.  Use the depth arrangement  gadgets  in the upper right to get back
to the Workbench screen so as to double  click Graphidump.  I had to use the
Left Amiga N and M to get back  and  forth  on  the  screens with the hires,
interlace, black background graphs.   I  haven't  figured out why as of yet,
but it gets the job done.   This  technique  gave  nice  printouts on my dot
matrix.
     To save graphs as IFF files, I use  the  public  domain utility ScreenX
found on many BBS.  I open up ScreenX  on  the Workbench, draw my graph, and
then return to my Workbench as described  above to open up ScreenX.  The two
main tasks this utility performs is saving screens as IFF files and printing 
screens.  However, I could  never  seem  to  get  ScreenX to read my printer
preferences as I had set them, so I  decided  to use ScreenX just for saving
the graphs as IFF files.   I'll  use  Graphidump  for  the  printouts.  Once
saved, these graphs can be used in any slide show or paint program.



VIII. FILES INCLUDED ON THE ORIGINAL DISK

Files on the original Mark's MathPlotterV2.0 disk:

mathplotterV2.0     mathplotterV2.0.info
mpintroV2.0         mpintroV2.0.info
bas.rl              mathplotter.hlp     readme
readme.info         2dgrapher.run       polar.run
rotation_one.run    rotation_two.run    3dplotter.run
hidden3dplot.run    table_xy.run        table_xyz.run


                        <<END OF USER HELP MANUAL>>
























