Program Listing for File spline.hpp

Return to documentation for file (include/bitbots_splines/spline.hpp)

/*
This code is largely based on the original code by Quentin "Leph" Rouxel and Team Rhoban.
The original files can be found at:
https://github.com/Rhoban/model/
*/
#ifndef BITBOTS_SPLINES_INCLUDE_BITBOTS_SPLINES_SPLINE_HPP_
#define BITBOTS_SPLINES_INCLUDE_BITBOTS_SPLINES_SPLINE_HPP_

#include <iostream>
#include <vector>

#include "polynom.hpp"

namespace bitbots_splines {

class Spline {
 public:
  struct SplineT {
    Polynom polynom;
    double min;
    double max;
  };

  double pos(double t) const;
  double vel(double t) const;
  double acc(double t) const;
  double jerk(double t) const;

  double posMod(double t) const;
  double velMod(double t) const;
  double accMod(double t) const;
  double jerkMod(double t) const;

  double min() const;
  double max() const;

  void exportData(std::ostream &os) const;
  void importData(std::istream &is);

  size_t size() const;

  const SplineT &part(size_t index) const;

  void addPart(const Polynom &poly, double min, double max);

  void copyData(const Spline &sp);

 protected:
  std::vector<SplineT> splines_;

  virtual void importCallBack();

 private:
  double interpolation(double x, double (Polynom::*func)(double) const) const;

  double interpolationMod(double x, double (Polynom::*func)(double) const) const;
};

}  // namespace bitbots_splines

#endif