27 {
28 if (xy.empty()) {
30 return false;
31 }
32 auto data(xy);
33 std::sort(data.begin(), data.end());
34 Eigen::VectorXd x(data.size());
35 Eigen::VectorXd y(data.size());
36 for (unsigned i = 0; i < data.size(); ++i) {
37 x(i) = data[i].first;
38 y(i) = data[i].second;
39 }
40 x_min_ = data.front().first;
41 x_max_ = data.back().first;
42 y_start_ = data.front().second;
43 y_end_ = data.back().second;
44
45
46 spline_.reset(new Eigen::Spline<double, 1>(
48 y.transpose(),
49
50 static_cast<Eigen::DenseIndex>(std::min<size_t>(x.size() - 1, 3)),
51 ScaledValues(x))));
52 return true;
53}
double Interpolate(double x) const