1 #ifndef SPLINE_FITTER_HPP 2 #define SPLINE_FITTER_HPP 4 #include <Eigen/SparseLU> 57 int n = m_points.size()+2;
58 Eigen::SparseMatrix<T> A(n,n);
60 Eigen::Matrix<T, Eigen::Dynamic, 1> b(n);
61 std::vector<Eigen::Triplet<T> > triplets;
62 triplets.reserve((n)*2);
66 for(
int i = 1; i < n-1; i++)
68 triplets.push_back(Eigen::Triplet<T>(i,i-1,0.125));
69 triplets.push_back(Eigen::Triplet<T>(i,i,0.75));
70 triplets.push_back(Eigen::Triplet<T>(i,i+1,0.125));
74 __insertStartpointCoeffs(triplets,b,0);
75 __insertEndpointCoeffs(triplets,b,n-1);
76 A.setFromTriplets(triplets.begin(), triplets.end());
79 Eigen::Matrix<T, Eigen::Dynamic, 1> x(n);
80 Eigen::SparseLU<Eigen::SparseMatrix<T> > solver;
90 for(
int i = 0; i < n; i++)
102 __insertStartpointCoeffs( std::vector<Eigen::Triplet<T> >& triplets,
103 Eigen::Matrix<T, Eigen::Dynamic, 1>& b,
106 triplets.push_back(Eigen::Triplet<T>(i,i,-1));
107 triplets.push_back(Eigen::Triplet<T>(i,i+1,1));
112 __insertEndpointCoeffs( std::vector<Eigen::Triplet<T> >& triplets,
113 Eigen::Matrix<T, Eigen::Dynamic, 1>& b,
116 triplets.push_back(Eigen::Triplet<T>(i,i-1,-1));
117 triplets.push_back(Eigen::Triplet<T>(i,i,1));
121 std::vector<T> m_points;
std::vector< T > compute_control_points() const
QuadraticSplineFitter(std::vector< T > &points)
void setPoints(std::vector< T > &points)