2010-11-07 19 views
0

J'ai une grille échantillonnée régulièrement, x, y, z et variable v. Je voudrais interpoler sur la base de x, y, & valeurs z données. Je ne veux pas utiliser numpy ou scipy, car ils ne sont pas installés sur la plate-forme que je vais utiliser.Interpolation de grille 3D en Python

Si je peux localiser les 8 nœuds de la grille environnante, quelle mathématique puis-je utiliser pour interpoler?

Merci

+3

Pas assez d'informations. –

+1

Un exemple de structure de données serait utile. –

Répondre

2

Cela semble vraiment être une question de mathématiques, mais vous avez aussi mentionné Python, donc j'essaie de donner un peu de code. Vous utiliseriez habituellement trilinear interpolation. Nous supposons donc que votre grille a les coins (0.0, 0.0, 0.0) et (max_x, max_y, max_z) et qu'elle est alignée avec le système de coordonnées. Nous notons le nombre de cellules le long de chaque axe par (n_x, n_y, n_z) respectivement et le point que vous souhaitez évaluer par (x, y, z) (tous de type float). Ensuite, votre logique est peut-être quelque chose de similaire à

a_x = x * n_x/max_x 
a_y = y * n_y/max_y 
a_z = z * n_z/max_z 
i_x = math.floor(a_x) 
i_y = math.floor(a_y) 
i_z = math.floor(a_z) 
l_x = a_x - i_x 
l_y = a_y - i_y 
l_z = a_z - i_z 

Les indices des 8 sommets de grille adjacents sont maintenant (i_x, i_y, i_z), (i_x+1, i_y, i_z), (i_x, i_y+1, i_z), ..., (i_x+1, i_y+1, i_z+1). Les coordonnées locales de votre point dans la cellule de la grille sont (l_x, l_y, l_z). Avec l'article de Wikipédia lié, cela devrait vous aider à avancer (notez que la notation est différente ici).