Beispiel #1
0
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();
}
Beispiel #2
0
/*
 * 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();
}
Beispiel #3
0
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();
}