vrcore  0.45
visuReal Messkern
 All Classes Files Functions Variables
Spline8interp.h
1 #pragma once
2 
3 /*interpoliert Punktmenge mit 8 Basisfunktionen folgender Lagrangebasis:
4 Zu n+1 Knoten n intervallweise
5 Splines mit Funktionswerten [0 0 ...1 ...0] (sog. Lagrange-Basis). Periodizitätwird gewaehrleistet, indem eine ungerade Knotenzahl verwendet wird und der Basisspline fuer den mittleren knoten (bei Null-RB an die erste Abletung, siehe octave help spline, "complete spline") nur verschoben wird. */ class Spline8interp : public H1interp { protected: static double baseCoeffs[8*4*8]; //sonst kann die abgeleitete Klasse nicht auf die eigenen Koeffs zugreifen: double* baseCoeffsPtr; double evalPP (double x, const double coeffs[4] ) const; double findInterval( unsigned int *i, double x ) const; void evalMonoms( double baseVals[4], const double x ) const ; void evalMonomsD( double baseVals[4], const double x ) const; public: double evalSpline (double x, const double coeffs[8*4] ) const; virtual double operator()(double * coeffs, const cv::Mat pts, const cv::Mat& firstDerivs) { return -1; } int operator()( double& residual, double& maxDist, cv::Mat& approxCoords, size_t& sysSize, const std::vector<cv::Mat> arg, const std::vector<cv::Mat> val, const std::vector<cv::Mat> argD, const std::vector<cv::Mat> valD, const std::vector<bool>& combineFlag); /*Dieser Konstruktor kannn von abgeleiteten Klassen verwendet werden, die hoehere Zahl von splines verwenden. Genaugenommen ist das natuerlich keine Ist-ein-Beziehung, man muesste eine gemeinsame Basis machen. Andererseits ist das nicht schlimm.*/ Spline8interp(const int nrBasisFcts_In = 8); ~Spline8interp(void); private: /* const double* diffx_i; double p(double x,int i); double p_(double x,int i); double q(double x,int i); double q_(double x,int i); */ };
6 wird gewaehrleistet, indem eine ungerade Knotenzahl verwendet wird und der
7 Basisspline fuer den mittleren knoten (bei Null-RB an die erste Abletung, siehe
8 octave help spline, "complete spline") nur verschoben wird.
9 */
11  public H1interp
12 {
13 protected:
14  static double baseCoeffs[8*4*8];
15  //sonst kann die abgeleitete Klasse nicht auf die eigenen Koeffs zugreifen:
16  double* baseCoeffsPtr;
17  double evalPP (double x, const double coeffs[4] ) const;
18  double findInterval( unsigned int *i, double x ) const;
19  void evalMonoms( double baseVals[4], const double x ) const ;
20  void evalMonomsD( double baseVals[4], const double x ) const;
21 
22 public:
23  double evalSpline (double x, const double coeffs[8*4] ) const;
24  virtual double operator()(double * coeffs, const cv::Mat pts, const cv::Mat& firstDerivs) { return -1; }
25  int operator()( double& residual,
26  double& maxDist,
27  cv::Mat& approxCoords,
28  size_t& sysSize,
29  const std::vector<cv::Mat> arg,
30  const std::vector<cv::Mat> val,
31  const std::vector<cv::Mat> argD,
32  const std::vector<cv::Mat> valD,
33  const std::vector<bool>& combineFlag);
34  /*Dieser Konstruktor kannn von abgeleiteten Klassen verwendet werden, die hoehere Zahl
35  von splines verwenden. Genaugenommen ist das natuerlich keine Ist-ein-Beziehung,
36  man muesste eine gemeinsame Basis machen. Andererseits ist das nicht schlimm.*/
37  Spline8interp(const int nrBasisFcts_In = 8);
38  ~Spline8interp(void);
39  private:
40 /* const double* diffx_i;
41  double p(double x,int i);
42  double p_(double x,int i);
43  double q(double x,int i);
44  double q_(double x,int i);
45 */
46 };
47 
double findInterval(unsigned int *i, double x) const
Definition: Spline8interp.cpp:108
Definition: H1interp.h:2
Definition: Spline8interp.h:10