29 #include "../exceptions/InterpolationNotDefinedException.h"
30 #include "../exceptions/NoInterpolationPossibleException.h"
33 using namespace alglib;
37 if (controlPoints.size() <
static_cast<unsigned>(3))
44 alglib::pspline2build(getCoordinateArray(0), controlPoints.size(), 2, 0, xInterpolation);
45 alglib::pspline2build(getCoordinateArray(1), controlPoints.size(), 2, 0, yInterpolation);
46 alglib::pspline2build(getCoordinateArray(2), controlPoints.size(), 2, 0, zInterpolation);
52 if (time < 0 || time > 1)
64 alglib::pspline2calc(xInterpolation, time,
x, temp);
65 alglib::pspline2calc(yInterpolation, time, y, temp);
66 alglib::pspline2calc(zInterpolation, time, z, temp);
68 Vector3BasePtr position =
new Vector3(
x, y, z);
69 QuaternionBasePtr base = this->calculateOrientationAt(time);
70 return *
new PoseBasePtr(
new Pose(position, base));
77 for (
unsigned int i = 0; i < controlPoints.size(); i++)
79 if (controlPoints.at(i) == start)
97 SplineInterpolation::getCoordinateArray(
int coordinate)
99 std::string transformation =
"[";
101 for (PoseBasePtr current : controlPoints)
107 temp = current->position->x;
110 temp = current->position->y;
113 temp = current->position->z;
116 transformation = transformation +
"[" +
std::to_string(temp) +
"," +
118 if (i != controlPoints.size() - 1)
120 transformation +=
",";
124 transformation +=
"]";
125 const char*
c = transformation.c_str();
126 real_2d_array
input = *
new real_2d_array(
c);