Previous: fitpb2 Up: ../plot79_f.html Next: fitpc1


FITPB3

       SUBROUTINE  FITPB3 (XFIT, YFIT, ZFIT, NFIT, MAXFIT, X, Y, Z, N,
      X     K1, KN, NEXTRA)
 C$    (Overhauser Parabolic Blend 3-D)
 C$    Make an Overhauser parabolic  blend curve fit  to a set  of
 C$    3-D points.  The points may be positioned arbitrarily,  and
 C$    need  not  correspond  to  a  single-valued  function.   An
 C$    Overhauser curve passes  through the  original points,  and
 C$    forms a smooth approximation along their general direction.
 C$    For any 4 consecutive points,  the curve is constructed  by
 C$    joining a parametric quadratic passing through the first  3
 C$    points with one passing through the last 3.  The Overhauser
 C$    fit has several useful properties:
 C$
 C$         The Overhauser fit is a  local one, and a  change
 C$         in the K-th data point will affect the curve only
 C$         along the  four line  segments K-2..K-1,  K-1..K,
 C$         K..K+1, and K+1..K+2.
 C$
 C$         If the data points  are distinct, the  Overhauser
 C$         curve is  continuous  in its  zeroth,  first  and
 C$         second  derivatives  between   the  points,   and
 C$         continuous in its zeroth and first derivative  at
 C$         the data points.  If two adjacent data points are
 C$         identical, its first derivative is  discontinuous
 C$         at that point; if three are identical, the  curve
 C$         itself is discontinuous.
 C$
 C$         An Overhauser curve  generated for N  consecutive
 C$         points is the  same as that  for the same  points
 C$         taken in reverse order (???).
 C$
 C$    The Overhauser curve is thus a useful tool in curve design,
 C$    since simple  experimentation with  individual data  points
 C$    can be used to obtain any desired curve shape.  Because the
 C$    data points lie on the curve, rather than off it, as is the
 C$    case for  B-spline and  Bezier curves,  positioning of  the
 C$    data points may be easier.  On the other hand, it does  not
 C$    possess the convex hull property of the B-spline and Bezier
 C$    curves.  Like the  latter, the  Overhauser fit  generalizes
 C$    easily to 3-D and 4-D space curves.
 C$
 C$    The output arguments are:
 C$
 C$    XFIT(*),
 C$    YFIT(*),
 C$    ZFIT(*)........Output data points.
 C$    NFIT...........Number of points  actually stored in XFIT(*)
 C$                   YFIT(*),  and  ZFIT(*)   (will  not   exceed
 C$                   MAXFIT).  The points will be distributed  at
 C$                   intervals of approximately equal arc  length
 C$                   along the curve.
 C$
 C$    The input arguments are:
 C$
 C$    MAXFIT.........Limit  on  number   of  points  desired   in
 C$                   XFIT(*), YFIT(*) and ZFIT(*).
 C$    X(*),
 C$    Y(*),
 C$    Z(*)...........Original data points.
 C$    N..............Number of original data points.
 C$    K1.............Number  of times  to implicitly  repeat  the
 C$                   first original data  point.  If  out of  the
 C$                   range 0..2, the  nearer of  0 or  2 will  be
 C$                   used.
 C$    KN.............Number  of times  to  implicitly  repeat the
 C$                   last original data  point (point  N+NEXTRA).
 C$                   If out of the range 0..2, the nearer of 0 or
 C$                   2 will be used.
 C$    NEXTRA......... .LE. 0 - Use exactly N data points.
 C$                    .GT. 0 - Use N+NEXTRA data points, wrapping
 C$                             around in the  arrays X(*),  Y(*),
 C$                             and Z(*),  so  that  position  N+K
 C$                             indexes the  array at  position  K
 C$                             (actually at mod(N+K-1,N)+1).
 C$                   If NEXTRA  is out  of  the range  0..N,  the
 C$                   nearer of 0 or N will be used.
 C$
 C$    If the first three points are  the same as the last  three,
 C$    the Overhauser  curve will  be a  continuous closed  curve.
 C$    Thus, given a set of  points defining a polygon, where  the
 C$    last is  implicitly  connected  to the  first,  by  setting
 C$    NEXTRA =  3, one  can  generate a  fit  which itself  is  a
 C$    polygon.
 C$
 C$    References:
 C$    J.A. Brewer and  D.C.  Anderson,  "Visual Interaction  with
 C$    Overhauser Curves and Surfaces", Computer Graphics 11,  No.
 C$    2, 132-137  (1977).  The  formulation below  is taken  from
 C$    this article.
 C$
 C$    D.F. Rogers  and  J.A. Adams,  "Mathematical  Elements  for
 C$    Computer Graphics", McGraw-Hill (1976), pp. 133-138.
 C$    (09-APR-82)