#include <cmath>
#include <cstddef>
#include <iostream>
#include <vector>
#include <copp/copp.hpp>
int main()
{
constexpr std::size_t dim = 2;
auto path = copp::Path::from_evaluator_3rd(
dim,
0.0,
1.0,
[](copp::Span<const double> s,
copp::MatrixRef q,
copp::MatrixRef dq,
copp::MatrixRef ddq,
copp::MatrixRef dddq) {
for (std::size_t j = 0; j < s.size(); ++j)
{
const double x = s[j];
q(0, j) = x * x * x;
dq(0, j) = 3.0 * x * x;
ddq(0, j) = 6.0 * x;
dddq(0, j) = 6.0;
q(1, j) = std::sin(x);
dq(1, j) = std::cos(x);
ddq(1, j) = -std::sin(x);
dddq(1, j) = -std::cos(x);
}
});
std::vector<double> samples{0.0, 0.5, 1.0};
auto out = path.evaluate_up_to_3rd(samples);
std::cout << "dim = " << path.dim() << "\n";
std::cout << "q(0, 2) = " << out.q(0, 2) << "\n";
std::cout << "dq(0, 2) = " << out.dq.value()(0, 2) << "\n";
std::cout << "ddq(0, 2) = " << out.ddq.value()(0, 2) << "\n";
std::cout << "dddq(0, 2) = " << out.dddq.value()(0, 2) << "\n";
}