Previous: fitpl2 Up: ../plot79_f.html Next: fitpo1


FITPL3

       SUBROUTINE  FITPL3 (XNEW,YNEW,ZNEW,NPNEW, X,Y,Z,NP, DELTA)
 C$    (Fit - Polyline 3-D)
 C$    Given a set of points (X(I), Y(I), Z(I), I = 1,NP)  forming
 C$    a 3-D  space curve,  find  a new  set of  points  (XNEW(I),
 C$    YNEW(I),  ZNEW(I),  I  =  1,NPNEW),  which  is  smaller  if
 C$    possible by  eliminating  consecutive colinear,  or  almost
 C$    colinear, segments.
 C$
 C$    The output arguments are:
 C$
 C$    XNEW(*)........New X values returned.
 C$    YNEW(*)........New Y values  returned.
 C$    ZNEW(*)........New Z values  returned.   If the  old values
 C$                   need not be preserved, XNEW(*), YNEW(*), and
 C$                   ZNEW(*) may  be  the same  arrays  as  X(*),
 C$                   Y(*), and Z(*) respectively.
 C$    NPNEW..........Number of new (X,Y,Z) pairs returned.  Space
 C$                   must be available  in XNEW(*), YNEW(*),  and
 C$                   ZNEW(*) to  store at  most NP  items,  since
 C$                   NPNEW .LE.  NP on return.
 C$
 C$    The input arguments are:
 C$
 C$    X(*)...........Old X values.
 C$    Y(*)...........Old Y values.
 C$    Z(*)...........Old Z values.
 C$    NP.............Number of old (X,Y,Z) values.
 C$    DELTA..........Maximum deviation  between the  data  points
 C$                   and  the   required  vector   approximation,
 C$                   measured  relative  to   the  line   segment
 C$                   lengths in order so  that it is  independent
 C$                   of the scale of the input data.
 C$
 C$    It is assumed that  X, Y, and  Z are approximately  equally
 C$    scaled, so that distance  computations can be done  without
 C$    undue accuracy loss.  Internal scaling is done according to
 C$    the curve arclength, so that the  range of X, Y, and Z  can
 C$    approach the  underflow and  overflow  limits of  the  host
 C$    machine without causing errors.
 C$
 C$    This routine may prove useful in determining a reduced  set
 C$    of points which can satisfactorily represent a much  larger
 C$    set, but for which plotting  time is excessive.  This  will
 C$    generally be the case for points entered from a  digitizer.
 C$
 C$    The output set of  points is always a  subset of the  input
 C$    point set, and  contains the  same first  and last  points.
 C$    Thus, if the input points  are integral values, the  output
 C$    points will be too.
 C$
 C$    In the case of polygons, the last input point point  should
 C$    be identical to  the first  one.  If this  point lies  only
 C$    slightly off  the  line  segment  connecting  its  adjacent
 C$    neighbors, it  could  possibly be  eliminated.   Thus,  for
 C$    polygons,  one  should  call   this  routine  twice   using
 C$    different start points, then select the smaller output set.
 C$
 C$    The algorithm is the split-and-merge one given by
 C$
 C$    Theo  Pavlidis,  "Algorithms   for   Graphics   and   Image
 C$    Processing", Computer Science Press (1982), pp. 281-292.
 C$
 C$    straightforwardly extended from  2-D to 3-D,  but only  the
 C$    distance of points from the approximating line segments  is
 C$    considered, not the sign changes in the distances.
 C$    (28-DEC-83)