// Description: Catmull-Rom spline
// Documentation: interpolation.txt
#ifndef PASTELMATH_CRSPLINE_H
#define PASTELMATH_CRSPLINE_H
#include "pastel/sys/mytypes.h"
namespace Pastel
{
//! Evaluates a Catmull-Rom spline.
/*!
Given a sequence of points p = (p1, p2, ...),
a Catmull-Rom spline interpolates
all of the points, excluding the end points,
while obtaining C1 joins
between segments. The segment between
'startPoint' and 'endPoint' is given
by the parameter interval [0, 1].
To interpolate a sequence p, first use
the point set (p1, p2, p3, p4) with
time interval [0, 1], then take another
point set (p2, p3, p4, p5) with time
interval [0, 1]. Repeat for all points.
A Catmull-Rom spline is a special case of
the Kochanek-Bartels spline, see the
kbSpline() function. Even more generally,
one such segment is a special case of a
cubic Hermite curve, see cubicHermite() function.
*/
template <
typename PointType,
typename Real>
PointType crSpline(
const PointType& previousPoint,
const PointType& startPoint,
const PointType& endPoint,
const PointType& nextPoint,
const Real& time);
}
#include "pastel/math/crspline.hpp"
#endif