Interpolación trilineal

De testwiki
Ir a la navegación Ir a la búsqueda

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) 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, y de la interpolación bilineal, que opera con la dimensión D=2, a la dimensión D=3. Todos estos sistemas de interpolación utilizan polinomios de orden 1, lo que proporciona una precisión de orden 2, y requieren 2D=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 xd, yd y zd sean las diferencias entre cada uno de x, y, z y la coordenada más pequeña relacionada, es decir:[3]

xd=xx0x1x0yd=yy0y1y0zd=zz0z1z0

donde x0 indica el punto de red debajo de x, y x1 indica el punto de red por encima de x y de manera similar para y0,y1,z0 y z1.

Primero se interpola en x (imagínese que se está "empujando" la cara del cubo definida por C0jk hacia la cara opuesta, definida por C1jk), dando:

c00=c000(1xd)+c100xdc01=c001(1xd)+c101xdc10=c010(1xd)+c110xdc11=c011(1xd)+c111xd

donde c000 significa el valor de la función de (x0,y0,z0). A continuación, se interpolan estos valores (en y, "empujando" de Ci0k a Ci1k), dando:

c0=c00(1yd)+c10ydc1=c01(1yd)+c11yd

Finalmente, se interpolan estos valores en z (recorriendo una recta):

c=c0(1zd)+c1zd.

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, luego en y y finalmente en 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 c000, c100, c010, c110, c001, c101, c011, c111.

A continuación, se realiza una interpolación lineal entre c000 y c100 para encontrar c00, c001 y c101 para encontrar c01, c011 y c111 para encontrar c11, c010 y c110 para encontrar c10.

Ahora se interpola entre c00 y c10 para encontrar c0, c01 y c11 para encontrar c1. Finalmente, se calcula el valor c mediante interpolación lineal de c0 y c1.

En la práctica, una interpolación trilineal es idéntica a dos interpolaciones bilineales combinadas con una interpolación lineal:[3]

cl(b(c000,c010,c100,c110),b(c001,c011,c101,c111))

Algoritmo alternativo

Una forma alternativa de escribir la solución al problema de interpolación es[4]

f(x,y,z)a0+a1x+a2y+a3z+a4xy+a5xz+a6yz+a7xyz

donde los coeficientes se encuentran resolviendo el sistema lineal

[1x0y0z0x0y0x0z0y0z0x0y0z01x1y0z0x1y0x1z0y0z0x1y0z01x0y1z0x0y1x0z0y1z0x0y1z01x1y1z0x1y1x1z0y1z0x1y1z01x0y0z1x0y0x0z1y0z1x0y0z11x1y0z1x1y0x1z1y0z1x1y0z11x0y1z1x0y1x0z1y1z1x0y1z11x1y1z1x1y1x1z1y1z1x1y1z1][a0a1a2a3a4a5a6a7]=[c000c100c010c110c001c101c011c111],

dando el resultado

a0=c000x1y1z1+c001x1y1z0+c010x1y0z1c011x1y0z0(x0x1)(y0y1)(z0z1)+c100x0y1z1c101x0y1z0c110x0y0z1+c111x0y0z0(x0x1)(y0y1)(z0z1),a1=c000y1z1c001y1z0c010y0z1+c011y0z0(x0x1)(y0y1)(z0z1)+c100y1z1+c101y1z0+c110y0z1c111y0z0(x0x1)(y0y1)(z0z1),a2=c000x1z1c001x1z0c010x1z1+c011x1z0(x0x1)(y0y1)(z0z1)+c100x0z1+c101x0z0+c110x0z1c111x0z0(x0x1)(y0y1)(z0z1),a3=c000x1y1c001x1y1c010x1y0+c011x1y0(x0x1)(y0y1)(z0z1)+c100x0y1+c101x0y1+c110x0y0c111x0y0(x0x1)(y0y1)(z0z1),a4=c000z1+c001z0+c010z1c011z0+c100z1c101z0c110z1+c111z0(x0x1)(y0y1)(z0z1),a5=c000y1+c001y1+c010y0c011y0+c100y1c101y1c110y0+c111y0(x0x1)(y0y1)(z0z1),a6=c000x1+c001x1+c010x1c011x1+c100x0c101x0c110x0+c111x0(x0x1)(y0y1)(z0z1),a7=c000c001c010+c011c100+c101+c110c111(x0x1)(y0y1)(z0z1).

Véase también

Referencias

Plantilla:Listaref

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].

Plantilla:Control de autoridades