27 Curve(
size_t n=2) : diffs(n) {
28 for (
size_t i = 0; i < diffs.
size; ++i) diffs.
append(0);
51 size_t off{b.size / 2};
55 for (
size_t i = 0; i < off; ++i) {
57 slope = (b[i + 1 + off] - b[i + off]) / (b[i + 1] - b[i]);
61 P[i] = {b[i], b[i + off], slope};
71 size_t i = (P.
size - 1) / 2;
72 size_t left = 0, right = P.
size - 1;
75 diffs[0] = P[right].y;
81 i = (left + right) / 2;
84 if (dx >= P[i + 1].x) {
86 i = (left + right) / 2;
89 diffs[0] = P[i].m * (dx - P[i].x) + P[i].y;
109 size_t off{b.
size / 2};
112 for (
size_t i = 0; i < off; ++i) {
113 P[i] = {b[i], b[i + off]};
118 for (
auto &d: diffs) d = 0;
120 size_t i = (P.
size - 1) / 2;
121 size_t left = 0, right = P.
size - 1;
124 diffs[0] = P[right].y;
130 i = (left + right) / 2;
133 if (x >= P[i + 1].x) {
135 i = (left + right) / 2;
138 double dy = P[i + 1].y - P[i].y;
139 double dx = P[i + 1].x - P[i].x;
140 double tau = (x - P[i].x) / dx;
142 for (
int k = n; k >= 0; --k) {
143 for (
int j = n - diffs.
len; j > 0; --j) {
144 diffs[j] = diffs[j] * tau + diffs[j - 1];
146 if (n - k >= coeffs.
len)
149 diffs[0] = diffs[0] * tau + coeffs[k - coeffs.
len];
152 for (
size_t l = 0; l < diffs.
len; ++l) {
154 diffs[l] *= dy * l / pow(dx, l);
156 diffs[l] = P[i].y + diffs[l] * dy;
174 operator double *() {
179 for (
int i = 0; i < n; ++i) {
180 this->y[i] += other.y[i];
186 for (
int i = 0; i < n; ++i) {
187 this->y[i] -= other.y[i];
192 Reference(std::initializer_list<double> list) {
193 assert(list.size() == n);
195 for (
auto l = list.begin(); l != list.end(); ++l, ++i) {
202 for (
auto l = b.
begin(); l != b.
end(); ++l, ++i) {
Parametrized Curve.
Definition trajectory.h:16
virtual ~Curve()
virtual destructor
Definition trajectory.h:25
Class implementing linear interpolation.
Definition trajectory.h:42
Class implementing polynom interpolation.
Definition trajectory.h:98
dynamically allocated, but fixed-size buffer template
Definition buffer.h:18
Buffer & append(T b)
simple append single item
Definition buffer.h:44
T * end()
end method for range-based for loops
Definition buffer.h:58
size_t size
total capacity of buffer
Definition buffer.h:23
T * begin()
begin method for range-based for loops
Definition buffer.h:55
size_t len
number of items stored in buffer
Definition buffer.h:21
Class implementing reference interpolation.
Definition trajectory.h:167