Provided by: libncarg-dev_6.4.0-9_amd64 bug

NAME

       PPPPAP - can be called to preprocess a polygon in such a way as to remove certain
       peculiarities that can cause minor cosmetic errors in the output from the routines that
       return trapezoids.

SYNOPSIS

       CALL PPPPAP (XCIP,YCIP,NCIP,NBTS)

C-BINDING SYNOPSIS

       #include <ncarg/ncargC.h>

       void c_ppppap(float *xcip, float *ycip, int ncip, int nbts)

DESCRIPTION

       XCIP        (an input/output array of type REAL) is the X coordinate array for a polygon
                   to be used as input to one of the routines PPDITR, PPINTR, or PPUNTR.  PPPPAP
                   will alter the contents of this array.

       YCIP        (an input/output array of type REAL) is the Y coordinate arrays for a polygon
                   to be used as input to one of the routines PPDITR, PPINTR, or PPUNTR.  PPPPAP
                   will alter the contents of this array.

       NCIP        (an input/output variable of type INTEGER) is the number of points defining
                   the input polygon. PPPPAP may reduce the value of NCIP.

       NBTS        (an input expression of type INTEGER) is the number of significant bits to be
                   left unzeroed in the fractional part of each coordinate. Generally, one would
                   probably not want to use a value less than 10 or 12. On a 32-bit machine on
                   which reals have 24-bit fractions, 18 may be a good choice; on a 64-bit
                   machine with 48-bit fractions, larger values may be desirable.

C-BINDING DESCRIPTION

       The C-binding argument descriptions are the same as the FORTRAN argument descriptions.

USAGE

       The FORTRAN statement

         CALL PPPPAP (XCIP,YCIP,NCIP,NBTS)

       causes preprocessing of the X and Y coordinates of the points defining a polygon which is
       to be used as input to one of the principal POLYPACK routines that produce trapezoids. The
       object is to cure an annoying (but basically cosmetic) problem that sometimes occurs.

       The nature of the problem is as follows: Sometimes, when adjacent points have Y
       coordinates that differ only very slightly, there will be, among the output trapezoids,
       degenerates, of essentially zero height, that stick out to the left or right from the body
       of the polygon of which each trapezoid is a part. This happens because, in the calls to
       the user-defined trapezoid-processing routine URPT, the values of DXLE and DXRE become
       very large and the difference between the values of YCOT and YCOB becomes very small; in
       URPT, then, to get the X coordinates at the ends of the top of the trapezoid, the very
       large values and the very small values are multiplied together and the result is highly
       inaccurate.

       What PPPPAP does is this: Each of the input coordinates is first modified by zeroing out
       all but the first NBTS bits of its fractional part; then, any point with the same
       coordinates as the preceding point is culled. This ensures that there are no adjacent
       points with X or Y coordinates that are so nearly identical as to cause the observed
       problem, but has little real effect on the values of the coordinates.

       There are several reasons why this was not done automatically: 1) Because it's a little
       time-consuming (zeroing the low-order bits in a way that doesn't violate the FORTRAN-77
       standard is a bit difficult), it shouldn't be done if it doesn't have to be done, and the
       user may have reason to know that the problem doesn't arise.  2) The problem may arise in
       one of the polygons, but not the other (most likely, in the subject polygon, but not in
       the clip polygon).  3) The user knows best what precision needs to be maintained in the
       data.

EXAMPLES

       Use the ncargex command to see the following relevant examples: ppex01, tppack, c_ppex01.

ACCESS

       To use PPPPAP or c_ppppap, load the NCAR Graphics libraries ncarg, ncarg_gks, and ncarg_c,
       preferably in that order.

SEE ALSO

       Online: polypack, ppdipo, ppditr, ppinpo, ppintr, ppplcl, ppunpo, ppuntr, ncarg_cbind.

       Hardcopy: None.

COPYRIGHT

       Copyright (C) 1987-2009
       University Corporation for Atmospheric Research
       The use of this Software is governed by a License Agreement.