Previous: hznbo Up: ../plot79_h.html Next: hzngv
SUBROUTINE HZNCV (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), C$ above (S .GT. 0.0) or below (S .LT. 0) Z0 are C$ 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). C$ Values of LX and LY larger than 1 produce a C$ coarser mesh on the drawing without losing the C$ smoothness of the complete surface. LX should C$ be an integral divisor of NX-1, and LY of NY-1. C$ If this is not the case, the next smallest C$ value which satisfies this requirement is used C$ internally. At present, LX and LY will be C$ 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 C$ each value of top. This allows changing colors C$ between calls to help distinguish the sides. C$ TILT........Angle of tilt in degrees. Tilt is positive C$ counterclockwise looking down the horizontal C$ axis to the origin. Thus TILT=0.0 corresponds C$ to an overhead view looking down the positive Z C$ axis toward the origin, and gives a totally C$ uninteresting display of the X-Y grid. C$ Negative tilt angles tip the top part of the C$ rotated surface away from the observer around C$ the horizontal axis. TILT=-90.0 corresponds to C$ an edge-on view of the surface. Recommended C$ values are in the range -20..-70. C$ INTERP...... .TRUE. - Interpolate function values using C$ bivariate surface interpolation. C$ .FALSE. - Interpolate function values using C$ simple linear interpolation. This is C$ the fastest way, and is usually C$ adequate for grids larger than about C$ 50 by 50. C$ PL2.........2-D pen movement subroutine, usually PL2CA 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$ (20-JUL-89)