14 if(poly.size() >= 1) {
15 str = std::to_string(poly[0]);
18 for(
unsigned int i = 1; i < poly.size(); ++i) {
20 str += std::to_string(poly[i]);
22 str += std::to_string(i);
29 return strm <<
"[" << std::get<0>(
interval) <<
", " << std::get<1>(
interval) <<
"]";
36 for(
size_t i = 0; i < p_polynomRef.size(); ++i) {
40 for(
size_t j = 0; j < i; ++j) {
44 value += p_polynomRef[i] * iValue;
51 std::vector<double> poly;
52 for(
auto const& elt : p_polynomRef) {
64 for(
size_t i = 1; i < p_polynomRef.size(); ++i) {
68 for(
size_t j = 0; j < i - 1; ++j) {
72 value += p_polynomRef[i] * i * iValue;
82 for(
size_t i = 1; i < p_polynomRef.size(); ++i) {
86 for(
size_t j = 0; j < i - 1; ++j) {
90 value += p_polynomRef[i] * i * iValue;
100 for(
size_t i = 1; i < p_polynomVecSPtr->size(); ++i) {
104 for(
size_t j = 0; j < i - 1; ++j) {
108 value += p_polynomVecSPtr->at(i) * i * iValue;
120 float splinevalue = p_polySpline->evaluate(
static_cast<float>(p_point[0]));
121 float error = p_point[1] - splinevalue;
123 return error * error;
130 float splinevalue = p_polySpline.
evaluate(
static_cast<float>(p_point[0]));
131 float error = p_point[1] - splinevalue;
137 shared_ptr<line_markings_reference_t> p_lineMarkings,
138 float cross_angle_weight,
float cross_line_weight) {
141 for(shared_ptr<CarPose> pose: *p_poseSeriesSPtr) {
159 if(p_lineMarkings !=
nullptr){
160 for(shared_ptr<CarPose> pose: *p_poseSeriesSPtr) {
162 if(p_lineMarkings->isRightEnabled) {
166 error += (r_error * r_error) * cross_line_weight;
170 if(p_lineMarkings->isLeftEnabled) {
174 error += (l_error * l_error) * cross_line_weight;
187 PolySpline::PolySpline() {}
189 PolySpline::PolySpline(std::array<double,4> coeff,
double max,
double min) {
190 m_polynomVec.resize(2);
191 for(uint32_t i = 0; i < coeff.size(); i ++){
192 m_polynomVec.at(0).push_back(coeff.at(i));
195 m_intervalVec.push_back(std::tuple<float, float>(min,max));
200 m_intervalVec.push_back(p_interval);
201 m_polynomVec.push_back(
polynom(p_polynom));
204 void PolySpline::add_polynom(
float lowerBound,
float upperBound,
polynom const&
polynom) {
205 interval interv = std::make_tuple(lowerBound, upperBound);
209 float PolySpline::evaluate(
float p_x)
const {
210 for(
size_t i = 0; i < m_intervalVec.size(); ++i) {
211 if(p_x >= std::get<0>(m_intervalVec[i]) && p_x <= std::get<1>(m_intervalVec[i])) {
219 void PolySpline::clear() {
220 m_intervalVec.clear();
221 m_polynomVec.clear();