Вот что должен делать класс InterpolationBilinear
. См. документацию . Единственное, что он делает, это реализует билинейную интерполяцию между четырьмя точками, расположенными в прямоугольнике. Формула объяснена здесь , и вы также можете легко реализовать ее самостоятельно.
Вопрос в том, что такое float x
и float y
в вашем примере? Для InterpolationBilinear.interpolate
они должны представлять дробное положение между четырьмя углами образца прямоугольника.
Или вы хотите, чтобы float x
и float y
представляли номера элементов в вашем массиве? например (4.3,7.1) будет означать интерполяцию между элементами (4,7), (4,8), (5,7) и (5,8)? Тогда да, вам просто нужно вставить эти четыре значения в interpolate
(или вашу собственную реализацию этой простой формулы) вместе с дробными позициями 0,3 в х и 0,1 в у.
РЕДАКТИРОВАТЬ Теперь вы пояснили, что x
и y
должны представлять дробную позицию в массиве , назовем его raw[][]
и предположим, что это 10 x 10 т.е. индексы идут от 0 до 9 в обоих измерениях.
Для интерполяции в (x,y)
вам просто нужно найти, в какую клетку попадает (x,y)
, и интерполировать между четырьмя углами. В направлении х индексы будут представлять собой целые числа непосредственно выше и ниже x*9
, т.е. Math.floor(x*9)
и Math.floor(x*9) + 1
- то же самое у, но с y*9
. Теперь у вас есть четыре угла. Включите их в формулу. Дробная позиция будет что-то вроде xfrac = x*9 - Math.floor(x*9)
и yfrac = y*9 - Math.floor(y*9)
. Включите их в формулу.
Это должно повторяться для каждой точки в вашем целевом массиве. Обратите внимание, что x
в приведенном выше абзаце будет равно i/19
, а y
равно j/19
, где i
и j
- индексы целевого массива.