00001 00005 class SplineSpace : public HandleId 00006 00007 { 00008 private: 00009 00010 KnotVec knots; 00011 int k; 00012 00013 int mu(real x) const; 00014 00015 00016 Mat(NUMT) S_matrix(int kk, int mu); 00017 Mat(NUMT) R_matrix(int kk, int mu, real x); 00018 00019 Mat(NUMT) T_matrix(int kk, int mu, real x) const; 00020 Mat(NUMT) DT_matrix(int kk, int mu) const; 00021 00022 public: 00023 00024 SplineSpace() {} 00025 SplineSpace(const KnotVec& knots, int k); 00026 ~SplineSpace(); 00027 00028 bool redim(const KnotVec& kv, int k_) 00029 { this->k=k_; return this->knots.redim(kv); } 00030 bool redim(const SplineSpace& space); 00031 00032 bool ok() const { return getbool(k>0 && knots.kRegular(k)); } 00033 00034 void getKnotVec(VecSimple(real)& kv) const; 00035 00036 int order() const { return k; } 00037 00038 int dimension() const {return knots.size()-k;} 00039 00040 void print(Os os); 00041 00042 void BSplines(real x, int r, Mat(NUMT)& values, int& miu, 00043 bool miuOk = false) const; 00044 00045 void BSplineTableA(const VecSimple(real)& x, MatBand(NUMT)& table) const; 00046 00047 void BSplineTableA(const VecSimple(real)& x, Mat(NUMT)& table) const; 00048 }; 00049 00050