home *** CD-ROM | disk | FTP | other *** search
/ Fresh Fish 6 / FreshFish_September1994.bin / bbs / misc / cp-4.3.lha / cP / Source / tik.c < prev    next >
C/C++ Source or Header  |  1994-07-11  |  2KB  |  72 lines

  1. /* If tick == 0, this works out a "nice" interval, so that there */
  2. /* are between 3 and 7.5 major tick intervals in the input range */
  3. /* "vmin" to "vmax". Using this value for the tick interval or   */
  4. /* supplied value, it also computes "prec" which specifies       */
  5. /* the number of places that should be written after the decimal */
  6. /* point. The recommended number of subticks is returned in      */
  7. /* "nsubt" unless the routine is entered with a non-zero value   */
  8. /* of "nsubt". The output variable "mode" is set to 0 if         */
  9. /* labels are to be written in floating-point format, or to 1 if */
  10. /* they are to be written in fixed-point format.                 */
  11. /* THIS CODE WAS ADAPTED FROM PLPLOT.LIB                         */
  12.  
  13. #include <math.h>
  14. #include <exec/types.h>
  15.  
  16. void tik(double vmin, double vmax, double *tick, WORD *nsubt, BOOL *mode, WORD *prec)
  17. {
  18.  
  19. double t1, t2, vmod;
  20. LONG msd, np, ns;
  21.  
  22.       t1 = fabs(vmin);
  23.       t2 = fabs(vmax);
  24.  
  25.       vmod = max(t1,t2);
  26.  
  27.       *mode = 0;
  28.  
  29.       if (vmod <= 1e-2 || vmod >= 1e3) *mode = 1;
  30.  
  31.       t1 = (double)log10(vmod);
  32.       msd = (LONG)t1;
  33.  
  34.       t1 = (double)log10(fabs(vmax-vmin));
  35.       np = (LONG)t1;
  36.       t1 -= np;
  37.  
  38.       if (t1 > 0.7781512503)
  39.         {
  40.           t2 = 2.0 ;
  41.           ns = 4;
  42.         }
  43.       else if (t1 > 0.4771212549)
  44.         {
  45.           t2 = 1.0 ;
  46.           ns = 5;
  47.         }
  48.       else if (t1 > 0.1760912591)
  49.         {
  50.           t2 = 5.0;
  51.           ns = 5;
  52.           np--;
  53.         }
  54.       else
  55.         {
  56.           t2 = 1.0;
  57.           ns = 4;
  58.           np--;
  59.         }
  60.  
  61.       *tick = t2 * pow(10.0,(double)np);
  62.  
  63.       if (vmin > vmax) *tick = -*tick;
  64.  
  65.       if (*nsubt == 0) *nsubt = ns;
  66.  
  67.       if (*mode != 0)
  68.         *prec = msd - np;
  69.       else
  70.         *prec = max(-np,0);
  71. }
  72.