RIT VEXU Core API
Loading...
Searching...
No Matches
quintic_hermite_spline.h
1#pragma once
2
3#include <array>
4
5#include "core/math/spline/cubic_hermite_spline.h"
6
14 public:
17
24 QuinticHermiteSpline(const HermitePoint& start, const HermitePoint& end, double max_err = 1e-4)
25 : QuinticHermiteSpline(start.point, end.point, start.tangent, end.tangent,
26 start.second_derivative, end.second_derivative, max_err) {}
27
39 QuinticHermiteSpline(const Translation2d& start_pos, const Translation2d& end_pos,
40 const Translation2d& start_tangent, const Translation2d& end_tangent,
41 const Translation2d& start_accel, const Translation2d& end_accel,
42 double max_err = 1e-4) {
43 this->x_ =
44 quintic_coeffs(start_pos.x(units::in), end_pos.x(units::in), start_tangent.x(units::in),
45 end_tangent.x(units::in), start_accel.x(units::in), end_accel.x(units::in));
46 this->y_ =
47 quintic_coeffs(start_pos.y(units::in), end_pos.y(units::in), start_tangent.y(units::in),
48 end_tangent.y(units::in), start_accel.y(units::in), end_accel.y(units::in));
49 build_arc_table(max_err);
50 }
51
52 private:
56 static std::array<double, 6> quintic_coeffs(double start_pos, double end_pos,
57 double start_tangent, double end_tangent,
58 double start_accel, double end_accel) {
59 return {
60 start_pos,
61 start_tangent,
62 start_accel / 2.0,
63 (-20.0 * start_pos + 20.0 * end_pos - 12.0 * start_tangent - 8.0 * end_tangent -
64 3.0 * start_accel + end_accel) /
65 2.0,
66 (30.0 * start_pos - 30.0 * end_pos + 16.0 * start_tangent + 14.0 * end_tangent +
67 3.0 * start_accel - 2.0 * end_accel) /
68 2.0,
69 (-12.0 * start_pos + 12.0 * end_pos - 6.0 * start_tangent - 6.0 * end_tangent -
70 start_accel + end_accel) /
71 2.0,
72 };
73 }
74};
CRTP base class for Hermite splines of specific polynomial order.
Definition spline_base.h:342
constexpr Q x() const
Gets the x component.
Definition translation2d.h:65
constexpr Q y() const
Gets the y component.
Definition translation2d.h:74
QuinticHermiteSpline()=default
Default constructor.
QuinticHermiteSpline(const Translation2d &start_pos, const Translation2d &end_pos, const Translation2d &start_tangent, const Translation2d &end_tangent, const Translation2d &start_accel, const Translation2d &end_accel, double max_err=1e-4)
Constructs quintic Hermite spline from explicit 2D position, tangent, and acceleration vectors.
Definition quintic_hermite_spline.h:39
QuinticHermiteSpline(const HermitePoint &start, const HermitePoint &end, double max_err=1e-4)
Constructs quintic Hermite spline from start and end HermitePoint structures.
Definition quintic_hermite_spline.h:24
void build_arc_table(double max_err=1e-4)
Builds pre-computed parameter u and arc-length lookup tables using adaptive refinement.
Definition spline_base.h:277
Represents a boundary point along a Hermite spline.
Definition hermite_point.h:16