42 CHECK_GT(param, FLAGS_numerical_epsilon);
44 param_.push_back(param_.back() + param);
46 segments_.emplace_back(last_p_, last_v_, last_a_, jerk, param);
48 last_p_ = segments_.back().end_position();
50 last_v_ = segments_.back().end_velocity();
52 last_a_ = segments_.back().end_acceleration();
56 const double param)
const {
57 auto it_lower = std::lower_bound(param_.begin(), param_.end(), param);
59 if (it_lower == param_.begin()) {
60 return segments_[0].Evaluate(order, param);
63 if (it_lower == param_.end()) {
64 auto index = std::max(0,
static_cast<int>(param_.size() - 2));
65 return segments_.back().Evaluate(order, param - param_[index]);
68 auto index = std::distance(param_.begin(), it_lower);
69 return segments_[index - 1].Evaluate(order, param - param_[index - 1]);