Трилинейная интерполяция это метод многомерная интерполяция на 3-х мерный регулярная сетка. Он приближает значение функции в промежуточной точке
в пределах местного осевого прямоугольного призма линейно, используя функциональные данные о точках решетки. Для произвольного неструктурированная сетка (как используется в заключительный элемент анализ), необходимо использовать другие методы интерполяции; если все элементы сетки тетраэдры (3D симплексы ), тогда барицентрические координаты обеспечить простую процедуру.
Трилинейная интерполяция часто используется в численный анализ, анализ данных, и компьютерная графика.
По сравнению с линейной и билинейной интерполяцией
Трилинейная интерполяция является продолжением линейная интерполяция, который работает в пространствах с измерение
, и билинейная интерполяция, который оперирует размерностью
, к размеру
. Все эти схемы интерполяции используют многочлены порядка 1, что дает точность порядка 2, и для этого требуется
смежные предварительно определенные значения, окружающие точку интерполяции. Есть несколько способов получить трилинейную интерполяцию, которая эквивалентна трехмерной интерполяции. тензор B-шлиц интерполяция порядка 1, и оператор трилинейной интерполяции также является тензорным произведением 3 операторов линейной интерполяции.
Метод
Восемь угловых точек на кубе, окружающем точку интерполяции C
Изображение трехмерной интерполяции
Геометрическая визуализация трилинейной интерполяции. Произведение значения в желаемой точке и всего объема равно сумме произведений значения в каждом углу и частичного объема по диагонали напротив угла.
На периодической и кубической решетке пусть
,
, и
быть различиями между каждым из
,
,
и меньшая координата, то есть:

где
указывает точку решетки ниже
, и
указывает точку решетки над
и аналогично для
и
.
Сначала мы интерполируем по
(представьте, что мы "толкаем" грань куба, определяемую
к противоположному лицу, определяемому
), дающий:

куда
означает значение функции
Затем мы интерполируем эти значения (по
, "толкая" от
к
), дающий:

Наконец, мы интерполируем эти значения по
(проходя по очереди):

Это дает нам прогнозируемое значение для точки.
Результат трилинейной интерполяции не зависит от порядка шагов интерполяции по трем осям: любого другого порядка, например, по
, затем по
, и, наконец, вместе
, дает то же значение.
Вышеупомянутые операции можно визуализировать следующим образом: Сначала мы находим восемь углов куба, которые окружают нашу точку интереса. Эти углы имеют значения
,
,
,
,
,
,
,
.
Далее мы выполняем линейную интерполяцию между
и
найти
,
и
найти
,
и
найти
,
и
найти
.
Теперь делаем интерполяцию между
и
найти
,
и
найти
. Наконец, мы вычисляем значение
с помощью линейной интерполяции
и 
На практике трилинейная интерполяция идентична двух билинейная интерполяция в сочетании с линейной интерполяцией:

Альтернативный алгоритм
Альтернативный способ написать решение задачи интерполяции:

где коэффициенты находятся из решения линейной системы

дающий результат
![{ displaystyle { begin {align} a_ {0} = {} & { frac {-c_ {000} x_ {1} y_ {1} z_ {1} + c_ {001} x_ {1} y_ {1} } z_ {0} + c_ {010} x_ {1} y_ {0} z_ {1} -c_ {011} x_ {1} y_ {0} z_ {0}} {(x_ {0} -x_ {1 }) (y_ {0} -y_ {1}) (z_ {0} -z_ {1})}} + {} & { frac {c_ {100} x_ {0} y_ {1} z_ { 1} -c_ {101} x_ {0} y_ {1} z_ {0} -c_ {110} x_ {0} y_ {0} z_ {1} + c_ {111} x_ {0} y_ {0} z_ {0}} {(x_ {0} -x_ {1}) (y_ {0} -y_ {1}) (z_ {0} -z_ {1})}}, [4pt] a_ {1} = {} & { frac {c_ {000} y_ {1} z_ {1} -c_ {001} y_ {1} z_ {0} -c_ {010} y_ {0} z_ {1} + c_ {011 } y_ {0} z_ {0}} {(x_ {0} -x_ {1}) (y_ {0} -y_ {1}) (z_ {0} -z_ {1})}} + {} & { frac {-c_ {100} y_ {1} z_ {1} + c_ {101} y_ {1} z_ {0} + c_ {110} y_ {0} z_ {1} -c_ {111} y_ {0} z_ {0}} {(x_ {0} -x_ {1}) (y_ {0} -y_ {1}) (z_ {0} -z_ {1})}}, [4pt ] a_ {2} = {} & { frac {c_ {000} x_ {1} z_ {1} -c_ {001} x_ {1} z_ {0} -c_ {010} x_ {1} z_ {1 } + c_ {011} x_ {1} z_ {0}} {(x_ {0} -x_ {1}) (y_ {0} -y_ {1}) (z_ {0} -z_ {1})} } + {} & { frac {-c_ {100} x_ {0} z_ {1} + c_ {101} x_ {0} z_ {0} + c_ {110} x_ {0} z_ {1} -c_ {111} x_ {0} z_ {0}} {(x_ {0} -x_ {1}) (y_ {0} -y_ {1}) (z_ {0} -z_ {1})}} , [4pt] a_ {3} = {} & { frac {c_ {000} x_ {1} y_ {1} -c_ {001} x_ {1} y_ {1} -c_ {010} x_ { 1} y_ {0} + c_ {011} x_ {1} y_ {0}} {(x_ {0} -x_ {1}) (y_ {0} -y_ {1}) (z_ {0} -z_ {1})}} + {} & { frac {-c_ {100} x_ {0} y_ {1} + c_ {101} x_ {0} y_ {1} + c_ {110} x_ {0 } y_ {0} -c_ {111} x_ {0} y_ {0}} {(x_ {0} -x_ {1}) (y_ {0} -y_ {1}) (z_ {0} -z_ { 1})}}, [4pt] a_ {4} = {} & { frac {-c_ {000} z_ {1} + c_ {001} z_ {0} + c_ {010} z_ {1} -c_ {011} z_ {0} + c_ {100} z_ {1} -c_ {101} z_ {0} -c_ {110} z_ {1} + c_ {111} z_ {0}} {(x_ { 0} -x_ {1}) (y_ {0} -y_ {1}) (z_ {0} -z_ {1})}}, [4pt] a_ {5} = & { frac {-c_ {000} y_ {1} + c_ {001} y_ {1} + c_ {010} y_ {0} -c_ {011} y_ {0} + c_ {100} y_ {1} -c_ {101} y_ { 1} -c_ {110} y_ {0} + c_ {111} y_ {0}} {(x_ {0} -x_ {1}) (y_ {0} -y_ {1}) (z_ {0} - z_ {1})}}, [4pt] a_ {6} = {} & { frac {-c_ {000} x_ {1} + c_ {001} x_ {1} + c_ {010} x_ { 1} -c_ {011} x_ {1} + c_ {100} x_ {0} -c_ {101} x_ {0} -c_ {110} x_ {0} + c_ {111} x_ {0}} {( x_ {0} -x_ {1}) (y_ {0} -y_ {1}) (z_ {0} -z_ {1})}}, [4pt] a_ {7} = {} & { гидроразрыв {c_ {000} -c_ {001} -c_ {010} + c_ {011} -c_ {100} + c_ {101} + c_ {110} -c_ {111}} {(x_ {0} -x_ {1}) (y_ {0} -y_ {1}) (z_ {0} -z_ {1})}}. End {align}}}](https://wikimedia.org/api/rest_v1/media/math/render/svg/2017eb73468e519de26c930bdde4137584100afb)
Смотрите также
внешние ссылки
- псевдокод от НАСА, описывает итеративную обратную трилинейную интерполяцию (по вершинам и значению C найти Xd, Yd и Zd).
- Поль Бурк, Методы интерполяции, 1999. Содержит очень умный и простой метод поиска трилинейной интерполяции, который основан на бинарной логике и может быть расширен до любого измерения (тетралинейной, пенталинейной, ...).
- Кенрайт, Деформация тетраэдра произвольной формы. Международный симпозиум по визуальным вычислениям. Springer International Publishing, 2015 г. [1].