home *** CD-ROM | disk | FTP | other *** search
/ Power-Programmierung / CD1.mdf / elan / intgraph / tanx.eln < prev    next >
Text File  |  1988-10-13  |  2KB  |  78 lines

  1.  
  2. PROC graphics1 (REAL CONST xmin, xmax, INT CONST steps,
  3.                REAL PROC (REAL CONST) f):
  4.    REAL VAR x, delta x :: (xmax - xmin) / real (steps - 1);
  5.    move (graphics x limit DIV 3, graphics y limit DIV 2);
  6.    put ("Computing...");
  7.    determine minimal and maximal function values;
  8.    page;
  9.    draw the axes with annotation;
  10.    draw the graphics.
  11.  
  12. determine minimal and maximal function values:
  13.    x := xmin;
  14.    REAL VAR ymin :: f (x), ymax :: f (x);
  15.    WHILE x <= xmax
  16.    REP
  17.      x INCR delta x;
  18.      IF ymax < f (x) THEN ymax := f (x)
  19.      ELIF ymin > f (x) THEN ymin := f (x)
  20.      FI
  21.    ENDREP.
  22.  
  23. draw the axes with annotation:
  24.    fix viewport and world;
  25.    draw the axis x with annotation;
  26.    draw the axis y with annotation.
  27.  
  28. fix viewport and world:
  29.    INT CONST
  30.       xvmin :: 10 * character width,
  31.       xvmax :: graphics x limit - 10 * character width,
  32.       yvmin :: graphics y limit - 2 * line height,
  33.       yvmax :: 2 * line height;
  34.    REAL VAR
  35.       sx :: real (xvmax - xvmin) / (xmax - xmin),
  36.       sy :: real (yvmax - yvmin) / (ymax - ymin),
  37.       cx :: real (xvmin) - sx * xmin,
  38.       cy :: real (yvmin) - sy * ymin.
  39.  
  40. draw the axis x with annotation:
  41.    INT CONST y0 :: round (cy);
  42.    move (xvmin, y0);
  43.    draw (xvmax, y0);
  44.    move (xvmin - 8 * character width,
  45.          y0 - line height DIV 3);
  46.    plot text (text (xmin, 7, 2));
  47.    move (xvmax - 3 * character width DIV 2,
  48.          y0 - line height DIV 3);
  49.    plot text (text (xmax, 7, 2)).
  50.  
  51. draw the axis y with annotation:
  52.    INT CONST x0 :: round (cx);
  53.    move (x0, yvmin);
  54.    draw (x0, yvmax);
  55.    move (x0 - 5 * character width,
  56.          yvmin + line height DIV 3);
  57.    plot text (text (ymin, 7, 2));
  58.    move (x0 - 5 * character width,
  59.          yvmax - 4 * line height DIV 3);
  60.    plot text (text (ymax, 7, 2)).
  61.  
  62. draw the graphics:
  63.    x := xmin;
  64.    move (round (x * sx + cx), round (f (x) * sy + cy));
  65.    WHILE x <= xmax
  66.    REP
  67.      x INCR delta x;
  68.      draw (round (x * sx + cx), round (f (x) * sy + cy))
  69.    ENDREP.
  70. ENDPROC graphics1;
  71.  
  72. program:
  73.   enter graphics mode;
  74.   graphics1 (0.0, 6.0 * pi, 200, REAL PROC (REAL CONST) tan);
  75.   wait for confirmation (2 * graphics x limit DIV 3, 1);
  76.   leave graphics mode.
  77.  
  78.