
je ne l'ai jamais utilisée mais ça n'a pas l'air compliqué
essayez cela pour avoir une interpolation linéaire (fonction affine)
#include "InterpolationLib.h"
double xValues[] = {0, 25, 50, 75, 100};
double yValues[] = {0, 45, 70, 80, 100};
const int numValues = sizeof xValues / sizeof * xValues;
void interpoler(double x) {
Serial.print(x);
Serial.print("\t=> ");
Serial.println(Interpolation::Linear(xValues, yValues, numValues, x));
}
void setup() {
Serial.begin(115200);
interpoler(0);
interpoler(10);
interpoler(25);
interpoler(30);
interpoler(75);
}
void loop() {}
➜ vous verrez dans le terminal série
0.00 => 0.00
10.00 => 18.00
25.00 => 45.00
30.00 => 50.00
75.00 => 80.00
et si vous remplacez la fonction d'interpolation par ConstrainedSpline au lieu de linéaire
Serial.println(Interpolation::ConstrainedSpline(xValues, yValues, numValues, x));
vous aurez
0.00 => 0.00
10.00 => 20.16
25.00 => 45.00
30.00 => 51.26
75.00 => 80.0
vous disposez de toutes ces 5 possibilités:
double Step(double xValues[], double yValues[], int numValues, double pointX, double threshold = 1);
double Linear(double xValues[], double yValues[], int numValues, double pointX, bool trim = true);
double SmoothStep(double xValues[], double yValues[], int numValues, double pointX, bool trim = true);
double CatmullSpline(double xValues[], double yValues[], int numValues, double pointX, bool trim = true);
double ConstrainedSpline(double xValues[], double yValues[], int numValues, double pointX, bool trim = true);
il s'agit juste d'écrire la formule et éventuellement mettre cela dans une fonction
double interpolation(double x) {
return 0.00016 * x * x * x - 0.03143 * x * x + 2.543 * x - 0.2857;
}
quand vous écrivez x * x * x c'est x3