42 return calculateWeights(N, x, 0);
47 const double scale = coordinateScale(N, a, b);
48 return calculateWeights(N, (x - a) * scale, 0);
53 return calculateWeights(N, x, 1);
61 const double scale = coordinateScale(N, a, b);
62 return scale * calculateWeights(N, (x - a) * scale, 1);
67 static double coordinateScale(
size_t N,
double a,
double b) {
69 throw std::invalid_argument(
70 "CardinalSplineBasis interval must have nonzero length");
72 return (
static_cast<double>(N > 0 ? N - 1 : 0) +
73 kernels::IrwinHallCDF2.getLength()) /
78 static Weights calculateWeights(
size_t N,
double x,
size_t derivative) {
79 if (N == 0)
return Weights(0);
82 weights(0) = derivative == 0 ? 1.0 : 0.0;
86 const double kernelTime = x + kernels::IrwinHallCDF2.getBeginning();
87 Weights cumulative(N);
88 for (
size_t index = 0; index < N; ++index) {
89 cumulative(
static_cast<Eigen::Index
>(index)) =
90 kernels::IrwinHallCDF2.evaluateDerivative(
91 derivative, kernelTime -
static_cast<double>(index));
95 weights(0) = derivative == 0 ? 1.0 - cumulative(1) : -cumulative(1);
96 for (
size_t index = 1; index + 1 < N; ++index) {
97 weights(
static_cast<Eigen::Index
>(index)) =
98 cumulative(
static_cast<Eigen::Index
>(index)) -
99 cumulative(
static_cast<Eigen::Index
>(index + 1));
101 weights(
static_cast<Eigen::Index
>(N - 1)) =
102 cumulative(
static_cast<Eigen::Index
>(N - 1));
Compute an interpolating basis.
Piecewise polynomial Irwin-Hall PDF and CDF kernels.
Global functions in a separate testing namespace.
Definition chartTesting.h:28
CRTP Base class for function bases.
Definition Basis.h:90
Cubic cardinal-spline basis for scalar, vector, and manifold Basis functors.
Definition CardinalSplineBasis.h:35
static Weights DerivativeWeights(size_t N, double x, double a, double b)
Calculate first-derivative weights after mapping [a,b] onto the full spline support.
Definition CardinalSplineBasis.h:60
static Weights CalculateWeights(size_t N, double x, double a, double b)
Calculate weights after mapping [a,b] onto the full spline support.
Definition CardinalSplineBasis.h:46
static Weights DerivativeWeights(size_t N, double x)
Calculate first-derivative weights for unit-spaced control points.
Definition CardinalSplineBasis.h:52
static Weights CalculateWeights(size_t N, double x)
Calculate weights for unit-spaced control points.
Definition CardinalSplineBasis.h:41
Vector Parameters
Scalar control-point values consumed by the inherited basis functors.
Definition CardinalSplineBasis.h:38