RIT VEXU Core API
Loading...
Searching...
No Matches
cubic_hermite_spline.h
1#pragma once
2
3#include <array>
4
5#include "core/math/spline/hermite_point.h"
6#include "core/math/spline/spline_base.h"
7
14 public:
16 CubicHermiteSpline() = default;
17
24 CubicHermiteSpline(const HermitePoint& start, const HermitePoint& end, double max_err = 1e-4)
25 : CubicHermiteSpline(start.point, end.point, start.tangent, end.tangent, max_err) {}
26
35 CubicHermiteSpline(const Translation2d& start_pos, const Translation2d& end_pos,
36 const Translation2d& start_tangent, const Translation2d& end_tangent,
37 double max_err = 1e-4) {
38 this->x_ = cubic_coeffs(start_pos.x(units::in), end_pos.x(units::in),
39 start_tangent.x(units::in), end_tangent.x(units::in));
40 this->y_ = cubic_coeffs(start_pos.y(units::in), end_pos.y(units::in),
41 start_tangent.y(units::in), end_tangent.y(units::in));
42 build_arc_table(max_err);
43 }
44
45 private:
49 static std::array<double, 4> cubic_coeffs(double start_pos, double end_pos, double start_tangent,
50 double end_tangent) {
51 return {
52 start_pos,
53 start_tangent,
54 -3.0 * start_pos + 3.0 * end_pos - 2.0 * start_tangent - end_tangent,
55 2.0 * start_pos - 2.0 * end_pos + start_tangent + end_tangent,
56 };
57 }
58};
CubicHermiteSpline(const Translation2d &start_pos, const Translation2d &end_pos, const Translation2d &start_tangent, const Translation2d &end_tangent, double max_err=1e-4)
Constructs cubic Hermite spline from explicit 2D position and tangent vectors.
Definition cubic_hermite_spline.h:35
CubicHermiteSpline(const HermitePoint &start, const HermitePoint &end, double max_err=1e-4)
Constructs cubic Hermite spline from start and end HermitePoint structures.
Definition cubic_hermite_spline.h:24
CubicHermiteSpline()=default
Default constructor.
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
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