La interpolación trilineal es un método de interpolación multivariable en un retículo regular tridimensional .[ 1] Se aproxima linealmente al valor de una función en un punto intermedio
(
x
,
y
,
z
)
{\displaystyle (x,y,z)}
dentro de un prisma rectangular axial local, utilizando los datos de la función en los puntos del retículo. Para un retículo no estructurado arbitrario (como se usa en el análisis del método de los elementos finitos ), se deben usar otros métodos de interpolación. Si todos los elementos de la malla son tetraedros (símplices 3D), entonces las coordenadas baricéntricas proporciona un procedimiento de cálculo más sencillo.
La interpolación trilineal se utiliza con frecuencia en el análisis numérico , el análisis de datos y la computación gráfica .
Comparado con la interpolación lineal y con la bilineal
La interpolación trilineal es la extensión de la interpolación lineal ,[ 1] que opera en espacios con dimensión
D
=
1
{\displaystyle D=1}
, y de la interpolación bilineal , que opera con la dimensión
D
=
2
{\displaystyle D=2}
, a la dimensión
D
=
3
{\displaystyle D=3}
. Todos estos sistemas de interpolación utilizan polinomios de orden 1, lo que proporciona una precisión de orden 2, y requieren
2
D
=
8
{\displaystyle 2^{D}=8}
valores predefinidos adyacentes que rodeen el punto de interpolación. Hay varias formas de llegar a la interpolación trilineal, que es equivalente a la interpolación tridimensional tensorial de orden 1 con B-splines , y el operador de interpolación trilineal también es un producto tensorial de 3 operadores de interpolación lineal.[ 2]
Método
Ocho puntos de las esquinas de un cubo que rodean al punto de interpolación C
Representación de la interpolación 3D
Una visualización geométrica de la interpolación trilineal. El producto del valor en el punto deseado y el volumen total es igual a la suma de los productos del valor en cada esquina y el volumen parcial diagonalmente opuesto a la esquina
En una red periódica y cúbica, sean
x
d
{\displaystyle x_{\text{d}}}
,
y
d
{\displaystyle y_{\text{d}}}
y
z
d
{\displaystyle z_{\text{d}}}
sean las diferencias entre cada uno de
x
{\displaystyle x}
,
y
{\displaystyle y}
,
z
{\displaystyle z}
y la coordenada más pequeña relacionada, es decir:[ 3]
x
d
=
x
−
x
0
x
1
−
x
0
y
d
=
y
−
y
0
y
1
−
y
0
z
d
=
z
−
z
0
z
1
−
z
0
{\displaystyle {\begin{aligned}x_{\text{d}}={\frac {x-x_{0}}{x_{1}-x_{0}}}\\y_{\text{d}}={\frac {y-y_{0}}{y_{1}-y_{0}}}\\z_{\text{d}}={\frac {z-z_{0}}{z_{1}-z_{0}}}\end{aligned}}}
donde
x
0
{\displaystyle x_{0}}
indica el punto de red debajo de
x
{\displaystyle x}
, y
x
1
{\displaystyle x_{1}}
indica el punto de red por encima de
x
{\displaystyle x}
y de manera similar para
y
0
,
y
1
,
z
0
{\displaystyle y_{0},y_{1},z_{0}}
y
z
1
{\displaystyle z_{1}}
.
Primero se interpola en
x
{\displaystyle x}
(imagínese que se está "empujando" la cara del cubo definida por
C
0
j
k
{\displaystyle C_{0jk}}
hacia la cara opuesta, definida por
C
1
j
k
{\displaystyle C_{1jk}}
), dando:
c
00
=
c
000
(
1
−
x
d
)
+
c
100
x
d
c
01
=
c
001
(
1
−
x
d
)
+
c
101
x
d
c
10
=
c
010
(
1
−
x
d
)
+
c
110
x
d
c
11
=
c
011
(
1
−
x
d
)
+
c
111
x
d
{\displaystyle {\begin{aligned}c_{00}&=c_{000}(1-x_{\text{d}})+c_{100}x_{\text{d}}\\c_{01}&=c_{001}(1-x_{\text{d}})+c_{101}x_{\text{d}}\\c_{10}&=c_{010}(1-x_{\text{d}})+c_{110}x_{\text{d}}\\c_{11}&=c_{011}(1-x_{\text{d}})+c_{111}x_{\text{d}}\end{aligned}}}
donde
c
000
{\displaystyle c_{000}}
significa el valor de la función de
(
x
0
,
y
0
,
z
0
)
.
{\displaystyle (x_{0},y_{0},z_{0}).}
A continuación, se interpolan estos valores (en
y
{\displaystyle y}
, "empujando" de
C
i
0
k
{\displaystyle C_{i0k}}
a
C
i
1
k
{\displaystyle C_{i1k}}
), dando:
c
0
=
c
00
(
1
−
y
d
)
+
c
10
y
d
c
1
=
c
01
(
1
−
y
d
)
+
c
11
y
d
{\displaystyle {\begin{aligned}c_{0}&=c_{00}(1-y_{\text{d}})+c_{10}y_{\text{d}}\\c_{1}&=c_{01}(1-y_{\text{d}})+c_{11}y_{\text{d}}\end{aligned}}}
Finalmente, se interpolan estos valores en
z
{\displaystyle z}
(recorriendo una recta):
c
=
c
0
(
1
−
z
d
)
+
c
1
z
d
.
{\displaystyle c=c_{0}(1-z_{\text{d}})+c_{1}z_{\text{d}}.}
Esto da un valor previsto para el punto.
El resultado de la interpolación trilineal es independiente del orden de los pasos de interpolación en los tres ejes: cualquier otro orden, por ejemplo en
x
{\displaystyle x}
, luego en
y
{\displaystyle y}
y finalmente en
z
{\displaystyle z}
, produce el mismo valor.
Las operaciones anteriores se pueden visualizar de la siguiente manera: Primero se localizan las ocho esquinas de un cubo que rodean al punto de interés. Estas esquinas tienen los valores
c
000
{\displaystyle c_{000}}
,
c
100
{\displaystyle c_{100}}
,
c
010
{\displaystyle c_{010}}
,
c
110
{\displaystyle c_{110}}
,
c
001
{\displaystyle c_{001}}
,
c
101
{\displaystyle c_{101}}
,
c
011
{\displaystyle c_{011}}
,
c
111
{\displaystyle c_{111}}
.
A continuación, se realiza una interpolación lineal entre
c
000
{\displaystyle c_{000}}
y
c
100
{\displaystyle c_{100}}
para encontrar
c
00
{\displaystyle c_{00}}
,
c
001
{\displaystyle c_{001}}
y
c
101
{\displaystyle c_{101}}
para encontrar
c
01
{\displaystyle c_{01}}
,
c
011
{\displaystyle c_{011}}
y
c
111
{\displaystyle c_{111}}
para encontrar
c
11
{\displaystyle c_{11}}
,
c
010
{\displaystyle c_{010}}
y
c
110
{\displaystyle c_{110}}
para encontrar
c
10
{\displaystyle c_{10}}
.
Ahora se interpola entre
c
00
{\displaystyle c_{00}}
y
c
10
{\displaystyle c_{10}}
para encontrar
c
0
{\displaystyle c_{0}}
,
c
01
{\displaystyle c_{01}}
y
c
11
{\displaystyle c_{11}}
para encontrar
c
1
{\displaystyle c_{1}}
. Finalmente, se calcula el valor
c
{\displaystyle c}
mediante interpolación lineal de
c
0
{\displaystyle c_{0}}
y
c
1
{\displaystyle c_{1}}
.
En la práctica, una interpolación trilineal es idéntica a dos interpolaciones bilineales combinadas con una interpolación lineal:[ 3]
c
≈
l
(
b
(
c
000
,
c
010
,
c
100
,
c
110
)
,
b
(
c
001
,
c
011
,
c
101
,
c
111
)
)
{\displaystyle c\approx l\left(b(c_{000},c_{010},c_{100},c_{110}),\,b(c_{001},c_{011},c_{101},c_{111})\right)}
Algoritmo alternativo
Una forma alternativa de escribir la solución al problema de interpolación es[ 4]
f
(
x
,
y
,
z
)
≈
a
0
+
a
1
x
+
a
2
y
+
a
3
z
+
a
4
x
y
+
a
5
x
z
+
a
6
y
z
+
a
7
x
y
z
{\displaystyle f(x,y,z)\approx a_{0}+a_{1}x+a_{2}y+a_{3}z+a_{4}xy+a_{5}xz+a_{6}yz+a_{7}xyz}
donde los coeficientes se encuentran resolviendo el sistema lineal
[
1
x
0
y
0
z
0
x
0
y
0
x
0
z
0
y
0
z
0
x
0
y
0
z
0
1
x
1
y
0
z
0
x
1
y
0
x
1
z
0
y
0
z
0
x
1
y
0
z
0
1
x
0
y
1
z
0
x
0
y
1
x
0
z
0
y
1
z
0
x
0
y
1
z
0
1
x
1
y
1
z
0
x
1
y
1
x
1
z
0
y
1
z
0
x
1
y
1
z
0
1
x
0
y
0
z
1
x
0
y
0
x
0
z
1
y
0
z
1
x
0
y
0
z
1
1
x
1
y
0
z
1
x
1
y
0
x
1
z
1
y
0
z
1
x
1
y
0
z
1
1
x
0
y
1
z
1
x
0
y
1
x
0
z
1
y
1
z
1
x
0
y
1
z
1
1
x
1
y
1
z
1
x
1
y
1
x
1
z
1
y
1
z
1
x
1
y
1
z
1
]
[
a
0
a
1
a
2
a
3
a
4
a
5
a
6
a
7
]
=
[
c
000
c
100
c
010
c
110
c
001
c
101
c
011
c
111
]
,
{\displaystyle {\begin{aligned}{\begin{bmatrix}1&x_{0}&y_{0}&z_{0}&x_{0}y_{0}&x_{0}z_{0}&y_{0}z_{0}&x_{0}y_{0}z_{0}\\1&x_{1}&y_{0}&z_{0}&x_{1}y_{0}&x_{1}z_{0}&y_{0}z_{0}&x_{1}y_{0}z_{0}\\1&x_{0}&y_{1}&z_{0}&x_{0}y_{1}&x_{0}z_{0}&y_{1}z_{0}&x_{0}y_{1}z_{0}\\1&x_{1}&y_{1}&z_{0}&x_{1}y_{1}&x_{1}z_{0}&y_{1}z_{0}&x_{1}y_{1}z_{0}\\1&x_{0}&y_{0}&z_{1}&x_{0}y_{0}&x_{0}z_{1}&y_{0}z_{1}&x_{0}y_{0}z_{1}\\1&x_{1}&y_{0}&z_{1}&x_{1}y_{0}&x_{1}z_{1}&y_{0}z_{1}&x_{1}y_{0}z_{1}\\1&x_{0}&y_{1}&z_{1}&x_{0}y_{1}&x_{0}z_{1}&y_{1}z_{1}&x_{0}y_{1}z_{1}\\1&x_{1}&y_{1}&z_{1}&x_{1}y_{1}&x_{1}z_{1}&y_{1}z_{1}&x_{1}y_{1}z_{1}\end{bmatrix}}{\begin{bmatrix}a_{0}\\a_{1}\\a_{2}\\a_{3}\\a_{4}\\a_{5}\\a_{6}\\a_{7}\end{bmatrix}}={\begin{bmatrix}c_{000}\\c_{100}\\c_{010}\\c_{110}\\c_{001}\\c_{101}\\c_{011}\\c_{111}\end{bmatrix}},\end{aligned}}}
dando el resultado
a
0
=
−
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
)
+
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
)
,
a
1
=
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
)
+
−
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
)
,
a
2
=
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
)
+
−
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
)
,
a
3
=
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
)
+
−
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
)
,
a
4
=
−
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
)
,
a
5
=
−
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
)
,
a
6
=
−
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
)
,
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
)
.
{\displaystyle {\begin{aligned}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}={}&{\frac {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{aligned}}}
Véase también
Referencias
Enlaces externos
pseudocódigo de la NASA , describe una interpolación trilineal inversa iterativa (dados los vértices y el valor de C, encuentre Xd, Yd y Zd).
Paul Bourke, Métodos de interpolación , 1999. Contiene un método muy inteligente y simple para encontrar la interpolación trilineal que se basa en la lógica binaria y se puede extender a cualquier dimensión (tetralineal, Pentalineal, ...).
Kenwright, Deformación del tetraedro de forma libre. Simposio Internacional sobre Computación Visual. Springer International Publishing, 2015 [1] .