Интерполировать координаты x, y, z, определяющие трехмерную поверхность на произвольную плоскость - PullRequest
0 голосов
/ 23 февраля 2020

Предположим, у меня есть набор координат x, y, z, определяющих поверхность трехмерной структуры:

points = [[x0,y0,z0],
          [x1,y1,z1],
          [xn,yn,zn]]

Как вы рекомендуете получить список точек 2D, определяющих периметр структура для данного среза?

Например, я мог бы хотеть, чтобы точки x, z моей структуры были у = 1,5, но предположим, что на этой плоскости фактически не определены точки, поэтому мне нужно линейно интерполировать.

Мне кажется, что scipy.interpolate.griddata содержит ответ, но я не могу понять, как его применить в этом случае. Любая помощь будет принята с благодарностью.

1 Ответ

0 голосов
/ 23 февраля 2020

Вы можете достичь этого с помощью scipy.ndimage.map_coordinates:

from scipy.ndimage import map_coordinates
import numpy as np
arr = np.arange(25, dtype=float).reshape((5, 5))
arr
Out[39]: 
array([[ 0.,  1.,  2.,  3.,  4.],
       [ 5.,  6.,  7.,  8.,  9.],
       [10., 11., 12., 13., 14.],
       [15., 16., 17., 18., 19.],
       [20., 21., 22., 23., 24.]])

map_coordinates(arr, (np.arange(5), [1.5]*5))
Out[40]: array([ 1.55357143,  6.55357143, 11.55357143, 16.55357143, 21.55357143])

Это требует явной передачи координат, я не уверен, как использовать numpy индексирование с map_coordinates для получения всего столбца, но это хотя бы решение.

...