Es ist so berechnet.
Blick auf den ersten zwei Zeilen:
int k = floorf(x_out[j]);
a = x_out[j] - floorf(x_out[j]);
Die erste Zeile definiert x0
die Bodenfunktion. Dies liegt daran, der Gegenstand einen Gitterabstand von einem für die Probenpunkte annimmt, gemäß der Linie:
the samples are obtained on the 0,1,...,M lattice
Jetzt konnten wir die zweite Zeile für Klarheit umschreiben als:
a = x_out[j] - k;
Die zweite Zeile ist daher x-x0
. Jetzt
, lassen Sie uns die Gleichung untersuchen:
result[j].y = a*data[k+1].y + (-data[k].y*a + data[k].y);
Umschreiben dies im Hinblick auf y
, x
und x0
gibt:
y = (x-x0)*data[k+1].y + (-data[k].y*(x-x0) + data[k].y);
der data[k+1].y
als y1
und data[k].y
als y0 umbenennen lassen:
y = (x-x0)*y1 + (-y0*(x-x0) + y0);
Lassen Sie sich diese neu anordnen, indem x-x0
Herausziehen:
y = (x-x0)*(y1-y0) + y0;
und neu anordnen wieder:
y = y0 + (y1-y0)*(x-x0);
Auch hier ist der Gitterabstand wichtig:
the samples are obtained on the 0,1,...,M lattice
So x1-x0
ist immer 1. Wenn wir es wieder einsetzen, erhalten wir
y = y0 + (y1-y0)*(x-x0)/(x1-x0);
Welches ist genau die Gleichung, die Sie gesucht haben.
Zugegeben, es ist lächerlich, dass der Code nicht geschrieben ist, um das zu verdeutlichen.
Für jeden, der den Code auf dieser Seite nicht finden kann, hat jemand ihn kurz nachdem er gepostet wurde, für Verwirrung gesorgt. – ughoavgfhw
Programmierung ist nicht für irgendjemanden, manche Leute können es einfach nicht machen: (( – Vlad