BSpline::BSpline(DenseVector coefficients, std::vector<std::vector<double>> knotVectors, std::vector<unsigned int> basisDegrees) : Function(knotVectors.size()), basis(BSplineBasis(knotVectors, basisDegrees)), coefficients(coefficients), knotaverages(computeKnotAverages()) { setCoefficients(coefficients); checkControlPoints(); }
/* * Constructors for multivariate B-spline using explicit data */ BSpline::BSpline(std::vector<std::vector<double>> knotVectors, std::vector<unsigned int> basisDegrees) : Function(knotVectors.size()), basis(BSplineBasis(knotVectors, basisDegrees)), coefficients(DenseVector::Zero(1)), knotaverages(computeKnotAverages()) { // Initialize coefficients to ones setCoefficients(DenseVector::Ones(basis.getNumBasisFunctions())); checkControlPoints(); }
PSpline::PSpline(const DataTable &samples, double lambda) : lambda(lambda) { // Check data assert(samples.isGridComplete()); std::vector< std::vector<double> > xdata = samples.getTableX(); numVariables = samples.getNumVariables(); // Assuming a cubic spline std::vector<unsigned int> basisDegrees(samples.getNumVariables(), 3); basis = BSplineBasis(xdata, basisDegrees, KnotVectorType::FREE); computeControlPoints(samples); init(); checkControlPoints(); }