Re: OT: Determining the size of plotting area
  Home FAQ Contact Sign in
comp.lang.fortran only
 
Advanced search
POPULAR GROUPS

more...

 Up
Re: OT: Determining the size of plotting area         

Group: comp.lang.fortran · Group Profile
Author: GaryScott
Date: Sep 17, 2008 15:34

On Sep 17, 11:42 am, "Kevin G. Rhoads" alum.mit.edu> wrote:
> In addition to suggestions received so far, I will note that
> if one uses log base 10 (i.e., common logs) it is possible
> to find the next higher power of ten that contains the
> values in question.   This is useful for a starting range
> when scaling may be wildly disparate form one set to the next.
> It is also useful for gridding and generating tick marks.
>
> Example (F77 from early 1980s, target processor M680000):
>
> *----------
>       ENTRY GENTIX
>       TIKS = .TRUE.
>       GRDS = .FALSE.
>       XOR = .TRUE.
>  6789 CONTINUE
>       XRANGE = XMAX - XMIN
>       YRANGE = YMAX - YMIN
>       XPOW = ALOG10(XRANGE)
>       YPOW = ALOG10(YRANGE)
>       NX = NINT(XPOW)
>       NY = NINT(YPOW)
>       XINCR = 10.0**NX
>       YINCR = 10.0**NY
>       NX = XRANGE/XINCR
>       NY = YRANGE/YINCR
>       IF (NX.LT.3) XINCR = XINCR/10.0
>       IF (NY.LT.3) YINCR = YINCR/10.0
>       NX = XRANGE/XINCR
>       NY = YRANGE/YINCR
>       IF (USEWIN) THEN
>           IF (((T-B).LE.81).AND.NY.GT.9) THEN
>               YINCR = YINCR*10.0
>           ELSEIF (((T-B).LE.121).AND.NY.GT.19) THEN
>               YINCR = YINCR*10.0
>           ELSEIF (((T-B).LE.161).AND.NY.GT.29) THEN
>               YINCR = YINCR*10.0
>           ELSEIF (((T-B).LE.241).AND.NY.GT.39) THEN
>               YINCR = YINCR*10.0
>           ENDIF
>           IF (((R-L).LE.65).AND.NX.GT.9) THEN
>               XINCR = XINCR*10.0
>           ELSEIF (((R-L).LE.97).AND.NX.GT.14) THEN
>               XINCR = XINCR*10.0
>           ELSEIF (((R-L).LE.129).AND.NX.GT.29) THEN
>               XINCR = XINCR*10.0
>           ELSEIF (((R-L).LE.193).AND.NX.GT.39) THEN
>               XINCR = XINCR*10.0
>           ENDIF
>           NX = XRANGE/XINCR
>           NY = YRANGE/YINCR
>       ENDIF
>       IF (NX.GE.51) XINCR = XINCR*10.0
>       IF (NY.GE.51) YINCR = YINCR*10.0
>       NX = XRANGE/XINCR
>       NY = YRANGE/YINCR
> *
>       LX = NINT(XMIN/XINCR-0.5)
>       IX = 1
>       IF (XMAX.GE.0.0) THEN
>           XFOO = XMAX * 1.00001D0
>       ELSE
>           XFOO = XMAX * 0.99999D0
>       ENDIF
>       XTIK(55) = XFOO
>       XTIK(54) = XFOO
>       XTIK(53) = XFOO
>       XTIK(52) = XFOO
>       XTIK(51) = XFOO
>       XTIK(50) = XFOO
>       XTIK(0) = XMIN
>       DO 1 I = LX,(LX+53)
>           XTIK(IX) = FLOAT(I)*XINCR
> *         IF (XTIK(IX).GT.XFOO) GOTO 30
>           IX = IX + 1
>     1 CONTINUE
>    30 CONTINUE
>       IF (IX.LT.54) THEN
>           DO 11 I = IX,54
>               XTIK(I) = XFOO
>    11     CONTINUE
>       ENDIF
>       LY = NINT(YMIN/YINCR-0.5)
>       IY = 1
>       IF (YMAX.GE.0.0) THEN
>           YFOO = YMAX * 1.00001D0
>       ELSE
>           YFOO = YMAX * 0.99999D0
>       ENDIF
>       YTIK(55) = YFOO
>       YTIK(54) = YFOO
>       YTIK(53) = YFOO
>       YTIK(52) = YFOO
>       YTIK(51) = YFOO
>       YTIK(50) = YFOO
>       YTIK(0) = YMIN
>       DO 2 I = LY,(LY+53)
>           YTIK(IY) = FLOAT(I)*YINCR
> *         IF (YTIK(IY).GT.YFOO) GOTO 31
>           IY = IY + 1
>     2 CONTINUE
>    31 CONTINUE
>       IF (IY.LT.54) THEN
>           DO 21 I = IY,54
>               YTIK(I) = YFOO
>    21     CONTINUE
>       ENDIF
>       IX = MAX(IX,IY,52,NX,NY)
>       IF (GRDS) CALL DOGRID(XTIK(1),YTIK(1),IX,SCALES,0)
>       IF (TIKS) THEN
>            IF (XOR) THEN
>                CALL TICKX(XTIK(1),YTIK(1),IX,SCALES,0)
>            ELSE
>                CALL DOTICK(XTIK(1),YTIK(1),IX,SCALES,0)
>            ENDIF
>       ENDIF
>       RETURN

Yuck...I'm sure glad I use GINO...3D graphing, surface plots, dynamic
view rotation, imports/exports lots of other formats.
no comments
diggit! del.icio.us! reddit!

RELATED THREADS
SubjectArticles qty Group
do structure definitions go in data area or in code area...15 comp.lang.c ·