File BSpline.h

Copyright

This code is licensed under the 3-clause BSD license.

Copyright ETH Zurich, Laboratory for Physical Chemistry, Reiher Group.

See LICENSE.txt for details.

namespace Scine

This header file contains functions that allow for common notation for common things that can be done at a different degree of derivatives.

This header contains alias definitions defining which classes to use for the different degrees of derivatives.

namespace Utils
namespace BSplines
class BSpline
#include <BSpline.h>

Contains the standard implementation of a basis-spline curve. Evaluation and getter methods are defined so that knot vectors and control points of derivatives are calculated when they are needed.

Public Functions

BSpline()
BSpline(Eigen::VectorXd knotVector, Eigen::MatrixXd controlPoints, int degree)
Eigen::VectorXd calculateBSplineCoefficientVector(double u, int derivativeOrder = 0) const
Coefficients calculateBSplineCoefficients(double u, int derivativeOrder = 0) const
Eigen::VectorXd front() const

Return the value at u = 0.0.

Eigen::VectorXd back() const

Return the value at u = 1.0.

Eigen::VectorXd evaluate(double u, int derivativeOrder = 0) const
Eigen::VectorXd operator()(double u) const
Eigen::VectorXd evaluateNaive(double u, int derivativeOrder = 0) const
void reverse()
BSpline reversed() const
int getDegree() const
int getOrder() const
int getDim() const
int controlPointCount() const
int getHighestCalculatedDerivative() const
BSpline getDerivativeBSpline(int derivativeOrder)
const Eigen::VectorXd &getKnotVector() const
const Eigen::VectorXd &getKnotVectorDerivative(int derivativeOrder) const
const Eigen::MatrixXd &getControlPointMatrix() const
const Eigen::VectorXd &deriveAndGetKnotVector(int derivativeOrder)
const Eigen::MatrixXd &deriveAndGetControlPointMatrix(int derivativeOrder)
bool isClampedAndNormed() const

Private Functions

void calculateDerivatives(int highestDerivativeToCalculate) const
const Eigen::MatrixXd &getControlPointMatrix(int k) const
Eigen::VectorXd deBoorCoefficient(double u, int i, int p, int k = 0) const
void deriveKnotVectors(int highestDerivativeToCalculate) const
Eigen::VectorXd deriveControlPoint(int i, int highestDerivativeToCalculate) const
void deriveControlPointMatrices(int highestDerivativeToCalculate) const
int findIdxOfLowerOrEqualDomainKnot(double u, int k) const

Private Members

int p_ = {0}
int n_ = {0}
int dim_ = {0}
int highestCalculatedDerivative_ = 0
std::vector<Eigen::VectorXd> Uk_
std::vector<Eigen::MatrixXd> Pk_