Previous: hidcs Up: ../plot79_h.html Next: hiddo


HIDCV

       SUBROUTINE  HIDCV (Z0, Z1,ZE,Z2, MX,MY, NX,NY, LX,LY, S,
      X                   SOUTH, EAST, TOP, TILT, INTERP, PL2)
 C$    (Corner View)
 C$    Make  a  hidden-line  drawing  of  a  surface  defined   in
 C$    cartesian coordinates  on a  uniform grid.   A rather  fast
 C$    algorithm is used to provide orthographic views from any of
 C$    the four corners, with optional tilt of the surface.
 C$
 C$    Z0......Cutoff value.  Only function values, ZE(I,J), above
 C$            (S .GT. 0.0) or below (S .LT. 0) Z0 are visible.
 C$    ZE......Array containing the surface.  ZE(I,J) =
 C$            F(X(I),Y(J)), where X(I) = (I-1)*DX and Y(J) =
 C$            (J-1)*DY both map onto the interval 0..1.
 C$    Z1,Z2...Span of surface values.
 C$    MX,MY...Actual declared dimensions of the array ZE(*,*).
 C$    NX,NY...Sections of ZE(*,*) actually used.
 C$    LX,LY...Increments  in X and Y directions (.GT. 0).  Values
 C$            of LX and LY larger  than 1 produce a coarser  mesh
 C$            on the drawing without losing the smoothness of the
 C$            complete surface.  LX should be an integral divisor
 C$            of NX-1, and LY of NY-1.  If this is not the  case,
 C$            the  next  smallest  value  which  satisfies   this
 C$            requirement is used internally.  At present, LX and
 C$            LY will be adjusted internally to be of equal size.
 C$    S.......=+1.0, graph positive part of function,
 C$            =-1.0, graph negative part of function,
 C$            = 0.0, graph both positive and negative parts.
 C$            If S = 0.0, the cutoff value Z0 has no effect.
 C$    SOUTH... .TRUE. - view from southern edge.
 C$            .FALSE. - view from northern edge.
 C$    EAST.... .TRUE. - view from eastern edge.
 C$            .FALSE. - view from western edge.
 C$    TOP..... .TRUE. - show top of surface.
 C$            .FALSE. - show bottom of surface.
 C$            This routine should be called twice, once with each
 C$            value of top.  This allows changing colors  between
 C$            calls to help distinguish the sides.
 C$    TILT....Angle  of  tilt  in  degrees.    TILT  is  positive
 C$            counterclockwise looking down  the horizontal  axis
 C$            to the  origin.  Thus  TILT=0.0 corresponds  to  an
 C$            overhead view  looking  down the  positive  Z  axis
 C$            toward   the   origin,   and   gives   a    totally
 C$            uninteresting display  of the  X-Y grid.   Negative
 C$            TILT angles tip the top part of the rotated surface
 C$            away from the observer around the horizontal  axis.
 C$            TILT=-90.0 corresponds to  an edge-on  view of  the
 C$            surface.   Recommended  values  are  in  the  range
 C$            -20..-70.
 C$    INTERP.. .TRUE. - Interpolate function values using
 C$                      bivariate surface interpolation.
 C$            .FALSE. - Interpolate function values using
 C$                      simple linear interpolation.  This
 C$                      is the fastest way, and is usually
 C$                      adequate for grids larger than about
 C$                      50 by 50.
 C$    PL2.....2-D pen movement subroutine
 C$
 C$    The algorithm used here is described by
 C$
 C$    J. Butland, "Surface Drawing Made Simple", Computer Aided
 C$    Design, Vol. 11, No. 1 (January, 1979).
 C$
 C$    It was discovered and implemented several years earlier  at
 C$    the Bettis  Atomic Power  Laboratory (pre-1971),  and  then
 C$    improved and rewritten by John Halleck at the University of
 C$    Utah, and the SAFRAS program, as it is called, has received
 C$    extensive use at the  University of Utah Computing  Center.
 C$    The outline sketch idea implemented in this routine appears
 C$    to   be   original   with   J.   Butland,   however.    The
 C$    Bettis/Halleck  version  differs  from  Butland's  in  that
 C$    horizons are computed in left-to-right sweeps, rather  than
 C$    in vertical strips, which necessitates substantially larger
 C$    horizon work areas, but economizes greatly in pen movement.
 C$    Butland's    algorithm     incorporates    cubic     spline
 C$    interpolation, while the Bettis/Halleck version uses linear
 C$    interpolation.  Provided that a sufficiently dense function
 C$    grid is available, the difference in quality is not  great.
 C$
 C$    Because the scan proceeds in strips from front to back, the
 C$    Butland algorithm implemented  here requires a  substantial
 C$    amount of pen movement,  since the pen  must be lifted  and
 C$    moved from back to  front for each  stip.  It is  therefore
 C$    not recommended for  use on incremental  pen plotters,  but
 C$    will perform  quite satisfactorily  on CRT  and  dot-matrix
 C$    displays.
 C$
 C$    (04-FEB-82)