Previous: fitpb2 Up: ../plot79_f.html Next: fitpc1
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)