RIT VEXU Core API
Toggle main menu visibility
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
13
class
QuinticHermiteSpline
:
public
HermiteSpline
<5> {
14
public
:
16
QuinticHermiteSpline
() =
default
;
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
};
HermiteSpline
CRTP base class for Hermite splines of specific polynomial order.
Definition
spline_base.h:342
LinearVector2d::x
constexpr Q x() const
Gets the x component.
Definition
translation2d.h:65
LinearVector2d::y
constexpr Q y() const
Gets the y component.
Definition
translation2d.h:74
QuinticHermiteSpline::QuinticHermiteSpline
QuinticHermiteSpline()=default
Default constructor.
QuinticHermiteSpline::QuinticHermiteSpline
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::QuinticHermiteSpline
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
SplineBase::build_arc_table
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
HermitePoint
Represents a boundary point along a Hermite spline.
Definition
hermite_point.h:16
include
core
math
spline
quintic_hermite_spline.h
Generated by
1.18.0