Трехмерная сеточная интерполяция в Python - PullRequest
0 голосов
/ 07 ноября 2010

У меня есть сетка с регулярными выборками, x, y, z и переменная v. Я хотел бы интерполировать на основе заданных значений x, y, & z.Я не хочу использовать numpy или scipy, потому что они не установлены на платформе, на которой я буду работать.

Если я могу найти 8 соседних узлов сетки, какую математику я могу использовать для интерполяции?

Спасибо

1 Ответ

2 голосов
/ 07 ноября 2010

На самом деле это вопрос математики, но вы также упомянули Python, поэтому я попытаюсь дать немного кода.Обычно вы используете трилинейную интерполяцию .

Поэтому мы предполагаем, что ваша сетка имеет углы (0.0, 0.0, 0.0) и (max_x, max_y, max_z) и выровнена по системе координат.Мы обозначаем число ячеек вдоль каждой оси соответственно (n_x, n_y, n_z), а точку, в которой вы хотите оценить, - (x, y, z) (все типа float).Тогда ваша логика может быть похожа на

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

Индексы 8 смежных вершин сетки теперь равны (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).Локальные координаты вашей точки в ячейке сетки (l_x, l_y, l_z).Вместе со связанной статьей в Википедии это должно вас заинтересовать (обратите внимание, что обозначения там другие).

...