Loading...
Searching...
No Matches
Trajectory.h
1
19
20#pragma once
21#include <vector>
22#include "Vec3.h"
23
24namespace CommonMath
25{
26
28
35 {
36 public:
38
45 Trajectory(std::vector<Vec3> coeffs, double startTime, double endTime)
46 : _coeffs(coeffs), _startTime(startTime), _endTime(endTime)
47 {
48 assert(coeffs.size() == 6);
49 assert(startTime <= endTime);
50 }
51
53
63 Trajectory(Vec3 c0, Vec3 c1, Vec3 c2, Vec3 c3, Vec3 c4, Vec3 c5, double startTime, double endTime)
64 : _coeffs{c0, c1, c2, c3, c4, c5}, _startTime(startTime), _endTime(endTime)
65 {
66 assert(startTime <= endTime);
67 }
68
70
74 Vec3 GetVelocity(double t) const
75 {
76 assert(t >= _startTime);
77 assert(t <= _endTime);
78 return _coeffs[0] * t * t * t * t * t + _coeffs[1] * t * t * t * t + _coeffs[2] * t * t * t +
79 _coeffs[3] * t * t + _coeffs[4] * t + _coeffs[5];
80 }
81
83
87 Vec3 GetValue(double t) const
88 {
89 assert(t >= _startTime);
90 assert(t <= _endTime);
91 return _coeffs[0] * t * t * t * t * t + _coeffs[1] * t * t * t * t + _coeffs[2] * t * t * t +
92 _coeffs[3] * t * t + _coeffs[4] * t + _coeffs[5];
93 }
94
96 std::vector<Vec3> GetCoeffs()
97 {
98 return _coeffs;
99 }
100
102 double GetStartTime() const
103 {
104 return _startTime;
105 }
106
108 double GetEndTime() const
109 {
110 return _endTime;
111 }
112
114
119 std::vector<Vec3> GetDerivativeCoeffs() const
120 {
121 std::vector<Vec3> derivCoeffs;
122 derivCoeffs.reserve(5);
123 for (int i = 0; i < 5; i++)
124 {
125 derivCoeffs.push_back((5 - i) * _coeffs[i]);
126 }
127 return derivCoeffs;
128 }
129
131
138 {
139 double startTime = std::max(_startTime, rhs.GetStartTime());
140 double endTime = std::min(_endTime, rhs.GetEndTime());
141 return Trajectory(_coeffs[0] - rhs[0], _coeffs[1] - rhs[1], _coeffs[2] - rhs[2], _coeffs[3] - rhs[3],
142 _coeffs[4] - rhs[4], _coeffs[5] - rhs[5], startTime, endTime);
143 }
144
146 inline Vec3 operator[](int i) const
147 {
148 switch (i)
149 {
150 case 0:
151 return _coeffs[0];
152 case 1:
153 return _coeffs[1];
154 case 2:
155 return _coeffs[2];
156 case 3:
157 return _coeffs[3];
158 case 4:
159 return _coeffs[4];
160 case 5:
161 return _coeffs[5];
162 default:
163 // We should never get here (index out of bounds)
164 assert(false);
165 return Vec3(); // Returns vector of NaNs
166 }
167 }
168
169 private:
170 std::vector<Vec3> _coeffs;
171 double _startTime, _endTime;
172 };
173
174} // namespace CommonMath
double GetEndTime() const
Return the end time of the trajectory.
Definition Trajectory.h:108
Trajectory(Vec3 c0, Vec3 c1, Vec3 c2, Vec3 c3, Vec3 c4, Vec3 c5, double startTime, double endTime)
Constructor.
Definition Trajectory.h:63
Vec3 GetValue(double t) const
Returns the 3D position of the polynomial at a given time.
Definition Trajectory.h:87
std::vector< Vec3 > GetDerivativeCoeffs() const
Returns the coefficient of the time derivative of the trajectory.
Definition Trajectory.h:119
Trajectory(std::vector< Vec3 > coeffs, double startTime, double endTime)
Constructor.
Definition Trajectory.h:45
Vec3 operator[](int i) const
Returns the i-th 3D vector of coefficients.
Definition Trajectory.h:146
Vec3 GetVelocity(double t) const
Returns the 3D velocity of the polynomial at a given time.
Definition Trajectory.h:74
Trajectory operator-(const Trajectory rhs)
Returns the difference between this trajectory and a given trajectory.
Definition Trajectory.h:137
std::vector< Vec3 > GetCoeffs()
Return the 3D vector of coefficients.
Definition Trajectory.h:96
double GetStartTime() const
Return the start time of the trajectory.
Definition Trajectory.h:102
3D vector class with common vector operations.
Definition Vec3.h:36