Método de interpolación multivariante en una cuadrícula regular tridimensional
Interpolación trilineal como dos interpolaciones bilineales seguidas de una interpolación lineal . La interpolación trilineal es un método de interpolación multivariante en una cuadrícula regular tridimensional . Aproxima el valor de una función en un punto intermedio dentro del prisma rectangular axial local de manera lineal, utilizando datos de la función en los puntos de la red. La interpolación trilineal se utiliza con frecuencia en análisis numérico , análisis de datos y gráficos por computadora . ( incógnita , y , el ) {\estilo de visualización (x,y,z)}
Métodos relacionados La interpolación trilineal es la extensión de la interpolación lineal , que opera en espacios con dimensión , y la interpolación bilineal , que opera con dimensión , a dimensión . Todos estos esquemas de interpolación utilizan polinomios de orden 1, lo que da una precisión de orden 2, y requiere 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 B-spline tensorial tridimensional de orden 1, y el operador de interpolación trilineal también es un producto tensorial de 3 operadores de interpolación lineal. D = 1 {\estilo de visualización D=1} D = 2 {\estilo de visualización D=2} D = 3 {\estilo de visualización D=3} 2 D = 8 Estilo de visualización 2^{D}=8
Para una malla arbitraria y no estructurada (como la que se utiliza en el análisis de elementos finitos ), se deben utilizar otros métodos de interpolación; si todos los elementos de la malla son tetraedros ( símplices 3D ), las coordenadas baricéntricas proporcionan un procedimiento sencillo.
Formulación Ocho puntos de esquina de un cubo que rodean el punto de interpolación C En una red periódica y cúbica, sean , , y
las diferencias entre cada uno de , , y la coordenada más pequeña relacionada, es decir: incógnita d {\displaystyle x_{\text{d}}} y d {\displaystyle y_{\text{d}}} el d {\displaystyle z_{\text{d}}} incógnita {\estilo de visualización x} y {\estilo de visualización y} el {\estilo de visualización z}
incógnita d = incógnita − incógnita 0 incógnita 1 − incógnita 0 y d = y − y 0 y 1 − y 0 el d = el − el 0 el 1 − el 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 indica el punto reticular debajo de , y indica el punto reticular arriba y de manera similar para y . x 0 {\displaystyle x_{0}} x {\displaystyle x} x 1 {\displaystyle x_{1}} x {\displaystyle x} y 0 , y 1 , z 0 {\displaystyle y_{0},y_{1},z_{0}} z 1 {\displaystyle z_{1}}
Primero se interpola a lo largo (imaginemos que uno está "empujando" la cara del cubo definida por hacia la cara opuesta, definida por ), dando: x {\displaystyle x} C 0 j k {\displaystyle C_{0jk}} C 1 j k {\displaystyle C_{1jk}}
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 significa el valor de la función de Luego uno interpola estos valores (a lo largo de , "empujando" desde a ), dando: c 000 {\displaystyle c_{000}} ( x 0 , y 0 , z 0 ) . {\displaystyle (x_{0},y_{0},z_{0}).} y {\displaystyle y} C i 0 k {\displaystyle C_{i0k}} C i 1 k {\displaystyle C_{i1k}}
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 a lo largo (caminando a lo largo de una línea): z {\displaystyle z}
c = c 0 ( 1 − z d ) + c 1 z d . {\displaystyle c=c_{0}(1-z_{\text{d}})+c_{1}z_{\text{d}}.} Esto nos da un valor previsto para el punto.
El resultado de la interpolación trilineal es independiente del orden de los pasos de interpolación a lo largo de los tres ejes: cualquier otro orden, por ejemplo a lo largo de , luego a lo largo de , y finalmente a lo largo de , produce el mismo valor. x {\displaystyle x} y {\displaystyle y} z {\displaystyle z}
Visualización de algoritmos 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. Las operaciones anteriores se pueden visualizar de la siguiente manera: primero encontramos las ocho esquinas de un cubo que rodea nuestro 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, realizamos una interpolación lineal entre y para encontrar , y para encontrar , y para encontrar , y para encontrar . c 000 {\displaystyle c_{000}} c 100 {\displaystyle c_{100}} c 00 {\displaystyle c_{00}} c 001 {\displaystyle c_{001}} c 101 {\displaystyle c_{101}} c 01 {\displaystyle c_{01}} c 011 {\displaystyle c_{011}} c 111 {\displaystyle c_{111}} c 11 {\displaystyle c_{11}} c 010 {\displaystyle c_{010}} c 110 {\displaystyle c_{110}} c 10 {\displaystyle c_{10}}
Ahora hacemos una interpolación entre y para encontrar , y para encontrar . Finalmente, calculamos el valor mediante la interpolación lineal de y c 00 {\displaystyle c_{00}} c 10 {\displaystyle c_{10}} c 0 {\displaystyle c_{0}} c 01 {\displaystyle c_{01}} c 11 {\displaystyle c_{11}} c 1 {\displaystyle c_{1}} c {\displaystyle c} c 0 {\displaystyle c_{0}} 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:
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
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
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 puede extenderse a cualquier dimensión (tetralineal, pentalineal, ...). Kenwright, Deformación tetraédrica de forma libre. Simposio internacional sobre computación visual. Springer International Publishing, 2015 [1].