Boost logo

Boost Users :

From: hgrwilson (hroachewilson_at_[hidden])
Date: 2019-09-30 00:46:30


Hi all,

I am trying to interpolate some data with a *catmull_rom* spline available
in boost math (interpolation). However, the resulting spline collapses to a
single point for all /s/, corresponding to the first control point,
/points_intr[0]/.

Below, the c++ code segment of the interpolation is depicted:

 std::vector<std::array&lt;double, 2>> points_intr(16);

  points_intr[0] = { 1.263270, 0.774614 };
  points_intr[1] = { 1.876, 2.480 };
  points_intr[2] = { 1.651110, 4.550 };
  points_intr[3] = { 1.426340, 5.688 };
  points_intr[4] = { 1.429, 7.054 };
  points_intr[5] = { 2.073220, 8.377020 };
  points_intr[6] = { 3.910, 9.140 };
  points_intr[7] = { 6.430, 9.537 };
  points_intr[8] = { 8.950, 9.859 };
  points_intr[9] = { 11.470, 10.317 };
  points_intr[10] = { 12.730, 10.6456 };
  points_intr[11] = { 13.990, 11.0741 };
  points_intr[12] = { 15.335, 11.6928 };
  points_intr[13] = { 16.680, 12.5661 };
  points_intr[14] = { 18.3538, 14.830 };
  points_intr[15] = { 18.700, 16.056 };

boost::math::catmull_rom<std::array&lt;double, 2>>
  interpolator_cr(std::move(points_intr));

auto max_s = interpolator_cr.max_parameter();
std::array<double, 2> inter_points;
for (int i = 0; i < 100; i++)
{
  inter_points = interpolator_cr(max_s * (i / num_points));
  geometry_msgs::Point p;
  p.x = inter_points[0];
  p.y = inter_points[1];
  p.z = z;
  //p.z = inter_points[2];
  marker.points.push_back(p);
  DEBUG_INFO("spline %d: (x, y) %f, %f, current_s: %f",
    i, p.x, p.y, max_s * (i / 100.0));
}

I'm using boost 1.71.0

--
Sent from: http://boost.2283326.n4.nabble.com/Boost-Users-f2553780.html

Boost-users list run by williamkempf at hotmail.com, kalb at libertysoft.com, bjorn.karlsson at readsoft.com, gregod at cs.rpi.edu, wekempf at cox.net