L'interpolation linéaire code sur wikipedia, je ne la comprends pas
Je suis en train de lire le code suivant (tiré de ici)
void linear_interpolation_CPU(float2* result, float2* data,
float* x_out, int M, int N) {
float a;
for(int j = 0; j < N; j++) {
int k = floorf(x_out[j]);
a = x_out[j] - floorf(x_out[j]);
result[j].x = a*data[k+1].x + (-data[k].x*a + data[k].x);
result[j].y = a*data[k+1].y + (-data[k].y*a + data[k].y);
}
}
mais je ne l'obtenez pas.
Pourquoi n'est-elle pas le résultat de[y] calculée en utilisant la
formule?
Pour quelqu'un qui ne peut pas trouver le code sur cette page, quelqu'un l'a édité peu de temps après cela a été posté pour être source de confusion.
La programmation n'est pas pour n'importe qui, certaines personnes ne peuvent pas le faire :((
La programmation n'est pas pour n'importe qui, certaines personnes ne peuvent pas le faire :((
OriginalL'auteur Johnny Pauling | 2013-03-11
Vous devez vous connecter pour publier un commentaire.
Il est calculé de cette façon.
Regarder les deux premières lignes:
La première ligne définit
x0
à l'aide de la fonction floor. C'est parce que l'article suppose un espacement de réseau de l'un pour les points d'échantillonnage, conformément à la ligne:Maintenant, nous pourrions réécrire la deuxième ligne pour plus de clarté:
La deuxième ligne est donc
x-x0
.Maintenant, laissez-nous examiner l'équation:
Réécriture en termes de
y
,x
, etx0
donne:Nous allons renommer
data[k+1].y
commey1
etdata[k].y
que y0:Réarrangeons ce en tirant
x-x0
:Et réorganiser à nouveau:
Encore une fois, l'espacement de réseau est importante:
Ainsi,
x1-x0
est toujours 1. Si nous mettons de nouveau, nous obtenonsQui est juste à l'équation que vous recherchez.
Certes, il est ridicule que le code n'est pas écrit de manière à rendre apparent.
OriginalL'auteur Richard