YCurve.cpp 1008 B

12345678910111213141516171819202122232425262728293031323334353637383940414243444546
  1. #include "pch.h"
  2. #include "YCurve.hpp"
  3. #include <iostream>
  4. #include <cassert>
  5. YCurve::YCurve(const float s, const float b, const float m, const float w, const float h, const float maxChannelY)
  6. {
  7. max = maxChannelY;
  8. Eigen::RowVectorXf knots(10);
  9. knots << 0.0f, 0.0f, 0.0f, 0.2f, 0.4f, 0.6f, 0.8f, 1.0f, 1.0f, 1.0f;
  10. Eigen::MatrixXf ctrls(7, 2);
  11. ctrls << 0, 0,
  12. 10, s,
  13. 30, b,
  14. 50, m,
  15. 70, w,
  16. 90, h,
  17. max, 100;
  18. ctrls.transposeInPlace();
  19. spline = Eigen::Spline<float, 2, 2>(knots, ctrls);
  20. }
  21. Eigen::MatrixXf* YCurve::evalpts(unsigned int nb)
  22. {
  23. Eigen::MatrixXf* pts = new Eigen::MatrixXf(nb, 2);
  24. float delta = 1.0f / (nb - 1.0f);
  25. unsigned int i;
  26. float step;
  27. for (i = 0, step = 0; i < nb; i++, step += delta)
  28. {
  29. //Peut mieux faire en récupérant spline(step) dans une variable pour éviter de relancer le calcul
  30. Eigen::Spline<float, 2, 2>::PointType estim = spline(i * delta);
  31. (*pts)(i, 0) = estim[0];
  32. (*pts)(i, 1) = estim[1];
  33. }
  34. return pts;
  35. }