SciELO - Scientific Electronic Library Online

 
vol.30 issue2Raman spectroscopy analysis of automotive paint for forensic purposesSimulation for processing of a Ti-6Al-7Nb alloy by equal-channel angular pressing(ECAP) using the finite element method author indexsubject indexarticles search
Home Pagealphabetic serial listing  

Services on Demand

Journal

Article

Indicators

Related links

  • Have no similar articlesSimilars in SciELO

Share


Revista Tecnología en Marcha

On-line version ISSN 0379-3982Print version ISSN 0379-3982

Tecnología en Marcha vol.30 n.2 Cartago Apr./Jun. 2017

http://dx.doi.org/10.18845/tm.v30i2.3192 

Artículo

Interpolación tridimensional en campos escalares

Three-dimensional interpolation on scalar fields

Gustavo Richmond-Navarro1 

Thomas Guillermo Barquero-Mena2 

Orlando Moisés Solís-Villalta3 

Derian Manuel Palma-Quirós4 

1Escuela de Ingeniería Electromecánica. Instituto Tecnológico de Costa Rica. Correo: grichmond@tec.ac.cr

2Estudiante. Instituto Tecnológico de Costa Rica. Correo electrónico: barquerotomas@gmail.com

3Estudiante. Instituto Tecnológico de Costa Rica. Correo electrónico: osolis1294@live.com

4Estudiante. Instituto Tecnológico de Costa Rica. Correo electrónico: derianpq@gmail.com

Resumen

[18]

Se presenta en detalle el desarrollo de la interpolación tridimensional para campos escalares, que consiste en generar información en cualquier punto del espacio, sobre alguna variable dependiente de las tres coordenadas cartesianas, en algún volumen definido. Esto a partir de un conjunto discreto de datos que representan el valor de la variable dependiente en puntos específicos del espacio.

[19]

Se desarrolla un método de interpolación tridimensional basado en obtener las coordenadas de todos los vecinos del punto de interés. Para luego asignar un peso relativo a cada uno de estos puntos, en función de la proximidad con el lugar donde se busca un nuevo valor de la variable dependiente. Este procedimiento se presenta en forma de diagrama de flujo, para que pueda ser desarrollado en cualquier lenguaje de programación.

[20]

El método propuesto es implementado en un código en software comercial y a la vez es validado al confrontar sus resultados con los que genera una función propia del software Matlab. Dicha función es detallada a profundidad para facilitar a cualquier usuario su utilización, estableciendo además las limitaciones y diferencias entre el uso de esta función y la implementación del método propuesto en un código computacional.

[21]

Se encuentra que el método propuesto es altamente confiable y que a su vez permite, eventualmente, adaptarse a condiciones donde la distribución de información en el espacio sea irregular o no se disponga de algún dato dentro de una matriz estructurada de mediciones.

Palabras clave: Interpolación; lineal; tridimensional; 3D; Matlab; método numérico

Abstract

[25]

Development of three-dimensional interpolation for scalar fields, which consists of generating information from some three Cartesian coordinates dependent variable in any point of space, in a defined volume, is introduced. This is achieved from a discrete set of data representing the value of the dependent variable at specific points in space.

[26]

A three-dimensional interpolation method is created based in obtaining the coordinates of all the neighbors of the point of interest, and assigning a relative weight to each of these points, as a function of the proximity to the place where a new value of the dependent variable is looked for. This procedure is represented as a flowchart, so that it can be implemented in any computer language.

[27]

The proposed method is implemented in a commercial software and it is simultaneously validated with results of an embedded function of Matlab software. The above mentioned function is detailed in depth to guarantee ease of use, establishing as well, the limitations and differences between the use of this function and the implementation of the proposed method.

[28]

It is found that the proposed method is highly reliable and that it has the capability of eventually being adapted to conditions where the information distribution in the space is irregular or there is not data within a structured measurement matrix.

Keywords: Interpolation; linear; three-dimensional; 3D; Matlab; numerical method

Introducción

En ingeniería, es común conocer un conjunto de datos discretos, obtenidos a través de mediciones de algún fenómeno, como los campos escalares de temperaturas o presiones en un espacio determinado y en puntos definidos. Para conocer los valores de las variables en puntos intermedios, la interpolación es un método ampliamente usado. Hoy día los métodos de interpolación proveen de herramientas que pueden ser utilizadas en áreas muy diversas como lo son las imágenes médicas [1], métodos de renderizado tridimensional [2] y modelado en geología [3], entre otros. De modo que la interpolación permite generar información nueva a partir de la estimación sobre datos conocidos. Vale resaltar la diferencia entre la interpolación y la regresión, siendo la primera una técnica que genera una función única que contiene estrictamente todos los datos medidos y se emplea cuando estos se conocen con elevada precisión; mientras que la segunda entrega una función que representa la tendencia de los datos, sin contenerlos necesariamente, y se emplea en casos que el error experimental sea significativo [4].

En cuanto a la interpolación, la versión en una dimensión busca encontrar los valores intermedios a partir de muestras discretas, cuando se estudia un fenómeno que depende de una sola variable. El valor buscado estará encerrado entre dos puntos, los cuales incidirán en el valor buscado [5]. Por ejemplo, si en un sistema se monitorean los niveles de temperatura cada hora, y se sabe el valor a las 2:00 pm y a las 3:00 pm, pero se desea saber el valor de la variable a las 2:20 pm se puede recurrir a interpolar para estimarla.

La interpolación en dos dimensiones es un método utilizado para obtener los valores no medidos o no conocidos en un fenómeno que dependa de dos variables. Un ejemplo es la estimación de los niveles de contaminación en una región geográfica, donde las muestras se toman en los vértices de una cuadrícula en la vista de planta de la región [6]. Entonces, el nivel de contaminación por estimar en cualquier punto desconocido, estará influenciado por los valores en los cuatro vértices de las muestras que lo rodean. Por tanto, en este caso el grado de contaminación dependerá de dos variables. (Dos coordenadas espaciales en la región geográfica, en la vista de planta, a un nivel de altura previamente definido).

La interpolación en tres dimensiones trata con fenómenos que dependan de tres variables. Por ejemplo, en una habitación donde se quiere saber la humedad en algún punto específico. Para ubicar este punto son necesarias tres coordenadas en el espacio. Las muestras tomadas de humedad en la habitación se pueden ubicar en una malla cúbica, en donde cada punto tiene un valor de humedad asociado. Entonces, los valores desconocidos estarán encerrados por los 8 vértices de un cubo dentro de la malla.

A diferencia de los métodos en una y dos dimensiones, en cuanto a interpolación en tres dimensiones la literatura no brinda mucha información. Se indica que se puede derivar de los métodos anteriores, pero no se explicita ningún procedimiento o ejemplo para resolver este tipo de problemas [4].

En el caso de soluciones por software, Matlab de MathWorks Inc., posee una función llamada interp3 la cual permite solucionar el problema de interpolar en tres dimensiones [7]. Esta función requiere como entrada una matriz cúbica que posea los valores de la variable de interés en cada vértice, además, solicita los puntos en los cuales se desea encontrar el valor en cuestión. Con estos datos, la función entrega el valor interpolado en las coordenadas requeridas. No obstante, sus ventajas en velocidad de cálculo y simplicidad de aplicación, tiene la limitación de que la malla de entrada debe ser perfectamente cúbica y es indispensable conocer el valor de la variable dependiente en todos los vértices de dicha malla. Además, el usuario no tiene posibilidad de conocer en detalle o modificar el funcionamiento interno de la función, por lo que no es posible desarrollar ajustes para casos especiales, por ejemplo, adaptaciones necesarias para mallas no cúbicas o espacios no isotrópicos donde la velocidad de propagación del fenómeno sea dependiente de la dirección de propagación.

Con este panorama, en el presente estudio se detalla el algoritmo de la interpolación tridimensional en campos escalares, de modo que sea posible conocer el valor de una variable en un campo continuo, a partir de valores medidos en el espacio de manera discreta.

Metodología

El método propuesto para interpolación tridimensional se plantea con una malla tridimensional cúbica. De modo que cualquier punto posee ocho vecinos ubicados en los vértices, como se muestra en la Figura 1. Cada vértice representa un valor dado, lo que permite interpolar. El método toma en cuenta el acercamiento con los puntos conocidos, es decir, un punto que se encuentre más cerca del punto de interés tendrá mayor influencia en el resultado de la interpolación.

Figura 1 Ubicación de un punto cualquiera (cuadrado) y sus puntos vecinos (círculos). 

La identificación de los puntos vecinos en la Figura 1 se realiza de dos maneras. La primera es en forma binaria, de manera que el primer, segundo y tercer número representan al eje “x”, “y” y “z” respectivamente. El número 0 representa que la coordenada está por detrás del punto de interés y el número 1 indica que está por delante. También se utiliza la nomenclatura con una diferencia D; cuando D se suma representa lo mismo que un 1, y cuando se resta representa un 0 . Por ejemplo, el punto 010 está ubicado en las coordenadas (X - D, Y + D, Z -D ).

Suponiendo que se tienen una cantidad finita de puntos, y que cada uno tiene asignado un valor para cierta variable A; si se deseara conocer el valor de A en un lugar cualquiera (X, Y, Z) que difiera de los puntos conocidos, entonces, se debe realizar una interpolación tridimensional y obtener así A(XYZ).

Para esto, se deben ubicar los ocho puntos más cercanos al sitio requerido y aplicar la ecuación (1), donde; por ejemplo, las coordenadas del punto 111 son X1, Y1 y Z1 y las coordenadas del punto 010 son X0, Y1 y Z0, de modo similar el resto de puntos [8].

En la ecuación anterior, el valor de A en cada uno de los ocho puntos es multiplicado por un factor que es el que da el valor de proximidad relativa con el punto (X, Y, Z) de estudio. Ese valor está en el rango entre 0 y 1. Por la estructura propuesta, se garantiza que la contribución relativa de todos los puntos complete la unidad.

La generalización del método se implementa mediante código, en particular desarrollado en Matlab. El método funciona según se detalla en la figura 2. Se presenta en forma de diagrama de flujo, para que pueda ser implementado en cualquier lenguaje de programación.

En la Figura 2 se explica el código de manera gráfica, el cual empieza con una lectura de los datos ingresados por el usuario. Posteriormente se hace un ordenamiento de los datos en X, Y, Z y el valor del campo escalar A.

El usuario ingresa los valores de las coordenadas donde desea conocer el valor de A. El código realiza un filtrado en todos los puntos que existan para encontrar los 8 puntos más cercanos al punto (X, Y, Z) ingresado por el usuario.

Dicho filtrado busca primero el punto (X1, Y1, Z1) asociados al valor A(111), luego el valor A(000) encontrado en el punto (X0, Y0, Z0), y a partir de estos, se pueden realizar más filtrados para llegar a los otros 6 valores y sus respectivos valores asignados.

En el filtrado se debe considerar la distancia entre los puntos. Es decir, la distancia “L” del cubo. Para ello se aplica la ecuación (2), de este modo se encuentra el punto inmediatamente posterior a cada uno de los valores del punto requerido (X, Y, Z). Para esta ecuación; X1 es el valor superior que se debe encontrar según sea el filtrado correspondiente y L es la medida de la arista del cubo de la Figura 1. Las dobles líneas en la fracción indican que se toma la parte entera de la división. La expresión para Y1 y Z1 es totalmente análoga.

Figura 2 Lógica del código implementado. 

En la Figura 2 se detalla la realización del filtrado. Lo primero es encontrar X1, para esto, es necesario buscar en la lista de valores en X todos aquellos que sean iguales a X1 aplicando la ecuación (2). Ese es el valor de X1, sin embargo, en este nivel del código hay una gran cantidad de puntos que cumplen con tener la coordenada X1, por lo tanto es necesario realizar un segundo filtrado para encontrar el punto Y1. De los puntos seleccionados mediante X1, se realiza la búsqueda de todos los valores en Y que sean iguales a Y1 considerando la ecuación (2), pero reemplazando las X por Y. De esta manera se reducen los puntos, sin embargo, resulta necesario un filtro adicional para encontrar el valor Z1. Se realiza una última búsqueda de manera análoga, pero esta vez en Z. Esto da como resultado el primer punto (X1, Y1, Z1), el cual tiene asociado el valor A(111).

Luego se realiza el mismo filtrado, pero, para encontrar el punto (X0, Y0 y Z0). El proceso se realiza según se explicó anteriormente, pero se utiliza la ecuación (3) para encontrar el valor de X0, que corresponde al punto inmediatamente inferior al requerido, los valores de Y0 y Z0 se encuentran de forma análoga reemplazando la X por Y o Z según corresponda.

Con esto se obtiene el punto (X0, Y0, Z0), el cual tiene un valor asociado A(000). A partir de estos dos puntos se pueden obtener los restantes, por ejemplo, para encontrar el valor de A(010) es necesario el punto (X0, Y1, Z0). De esta manera, se encuentran los otros seis valores: A(001), A(010), A(011), A(100), A(101) y A(110), asociados cada uno a un vértice distinto del cubo que encierra al punto de interés.

Con esta información, se aplica la ecuación (1) del método propuesto y tal como se mencionó anteriormente, se obtiene el valor interpolado. En la sección de aplicación se presenta un ejemplo para una mejor comprensión del método.

Aplicación

Para aplicar la solución propuesta se plantea un ejemplo de ingeniería que permite visualizar el uso de la interpolación tridimensional en campos escalares [9]. El problema planteado y la solución se presentan a continuación.

Se tiene, en una ciudad, una corriente de viento con un perfil de velocidad incidente u, como el que se muestra en la Figura 3. Cuando el flujo pasa alrededor de algún edificio, este se distorsiona y su perfil se convierte en u p en los alrededores del edificio de interés.

El factor de concentración, denotado como C f (equivalente a A en la sección de metodología, donde se explica el método propuesto), permite cuantificar la concentración de flujo y se define según se muestra en la ecuación (4):

El problema de ingeniería por resolver es lograr conocer el valor de C f en un punto cualquiera (X, Y, Z), dentro de un dominio tridimensional. En el caso particular es un volumen cúbico de 20 m de arista, con el sistema de coordenadas ubicado como se muestra en la Figura 3.

Figura 3 Concentración de flujo y sistema de coordenadas sobre el edificio de interés. 

Para conocer el valor del C f en las coordenadas (X, Y, Z), es necesario realizar la interpolación tridimensional en campos escalares que se propone en este artículo. Usando como datos de entrada la magnitud de la velocidad del viento dentro del dominio de interés. La aplicación de la solución se implementa, tal como se indicó anteriormente, en un código en Matlab.

En el ejemplo que se desarrolla, L = 1 m, por lo que se tienen 213 = 9261 puntos de medición, cada uno con un valor C f asociado.

Dado el valor de L, se buscará en los vectores de cada eje coordenado valores iguales a la parte entera de cada una de las coordenadas dadas por el usuario, más una unidad, y con esto se obtiene (X1, Y1, Z1). Para definir el punto (X0, Y0, Z0) entonces se realizará con la parte entera únicamente, sin sumar la unidad. Esto según las ecuaciones (2) y (3) respectivamente.

Un ejemplo concreto de lo anterior es tener como coordenadas de interpolación el punto (6,92, -8,56, 0,87). Entonces la parte entera más la unidad (7, -8, 1) es igual a (X1, Y1, Z1). De forma similar la parte entera (6, -9, 0) corresponde a (X0, Y0, Z0). Con esta información se construye la Cuadro 1, que muestra las 8 posibles permutaciones, para cada una de ellas existe un único valor de C f , el cual en este caso es tomado de un conjunto de datos que se emplearán posteriormente para validar el método propuesto.

Con la información del Cuadro 1 y la ecuación (1) del método propuesto, se obtiene para el punto de interés el factor de concentración, C f = 0,4576.

Cuadro 1 Ejemplo de los ocho puntos vecinos de (6,92, -8,56, 0,87). 

[101] [102] [103] [104] [105] [106] [107] [108] [109] [110] [111] [112] [113] [114] [115] [116] [117] [118] [119] [120] [121] [122] [123] [124] [125] [126] [127] [128] [129] [130] [131] [132] [133] [134]
PuntoCoordenadas (X, Y, Z)Cf
000(6, -9, 0)0,000
001(6, -9, 1)0,579
010(6, -8, 0)0,000
011(6, -8, 1)0,449
100(7, -9, 0)0,000
101(7, -9, 1)0,580
110(7, -8, 0)0,000
111(7, -8, 1)0,458

Validación

El método propuesto se valida mediante la función de Matlabinterp3. En la cual se deben ingresar 7 entradas: las primeras 3 son los vectores en los ejes “x”, “y” y “z” detallados en el cuadro 2, que contienen todas las posiciones cartesianas de los puntos donde se conocen los valores posibles para el campo escalar de interés, en el ejemplo en cuestión, el campo C f . Las últimas 3 entradas son las coordenadas del punto donde se quiere conocer el valor interpolado.

La cuarta entrada requiere de especial atención, es propiamente una matriz de tres índices, con los valores del campo escalar, en el caso particular C f . Esta matriz es de tamaño n por m por p, donde cada una de estas letras representa la cantidad de puntos en los ejes “y”, “x” y “z” respectivamente. Vale destacar que en esta matriz hay tres restricciones importantes: i) Se intercambian las coordenadas “y” y “x” respecto de lo acostumbrado, es decir, el primer índice se refiere al eje “y” y el segundo índice al eje “x”. ii) Debe existir estrictamente un valor para cada espacio en el arreglo, de modo que la ausencia de alguna medición en los vértices de la malla imposibilita utilizar esta función. iii) La malla de datos debe tener un espaciamiento uniforme, en caso de una distribución de datos irregular, la función interp3 no puede emplearse.

Esta última característica también la posee el código propuesto. Sin embargo, dado que el código está desarrollado de forma explícita, es posible modificarlo y adecuarlo para otro tipo de mallas con cualquier tipo de forma o estructura.

En la matriz tridimensional C f , cada entrada es propiamente un valor del campo de concentración de flujo, y tal como se indicó anteriormente, cada uno de sus índices hace referencia a cada una de las coordenadas “x”, “y” y “z” del punto. Para el caso particular en estudio, el Cuadro 2 presenta los rangos y coordenadas en cada uno de los ejes cartesianos.

De modo que, en el caso en estudio, el valor de C f (5, 10, 10) será el valor de C f en el punto con las coordenadas cartesianas (4, -1, 9). Así, se almacena la información de manera compacta, pues para 21 posiciones de datos por eje, se tienen entonces tres vectores de 21 entradas y una matriz de 21x21x21 = 9261 datos, en lugar de asignar cada punto de manera independiente en vectores, lo que implicaría generar 4 vectores de 9261 entradas cada uno.

Una vez ingresados los datos de entrada a la función interp3, se hace un ciclo de pruebas con 1000 puntos, elegidos de forma aleatoria, dentro de los rangos de interés, para validar el valor de C f que entrega el método propuesto, frente al que arroja la función interp3 de Matlab. La Figura 4 muestra el valor del error absoluto de estos 1000 ensayos.

Cuadro 2 Rangos de valores en cada eje de coordenadas. 

[148] [149] [150] [151] [152] [153] [154] [155] [156] [157] [158] [159] [160] [161] [162] [163] [164] [165] [166] [167] [168] [169] [170] [171] [172] [173] [174] [175] [176] [177] [178] [179] [180] [181] [182] [183] [184] [185] [186] [187] [188] [189] [190] [191] [192] [193] [194] [195] [196] [197] [198] [199] [200] [201] [202] [203] [204] [205] [206] [207] [208] [209] [210] [211] [212] [213] [214] [215] [216] [217] [218] [219] [220] [221] [222] [223] [224] [225] [226] [227] [228] [229] [230] [231] [232] [233] [234] [235] [236] [237] [238] [239] [240] [241] [242] [243] [244] [245] [246] [247] [248] [249] [250] [251] [252] [253] [254] [255]
Posiciónrango xrango yrango z
10-100
21-91
32-82
43-73
54-64
65-55
76-46
87-37
98-28
109-19
1110010
1211111
1312212
1413313
1514414
1615515
1716616
1817717
1918818
2019919
21201020

Figura 4 Error absoluto de 1000 ensayos con puntos aleatorios. 

El promedio del error de los 1000 ensayos de la figura 4 es 6,9575 x 10-17 y el épsilon del computado empleado es 2,22 x 10-16. Dado lo anterior y que el error máximo es del orden de 10-16, se puede asegurar la confiablidad del método propuesto, pues las diferencias encontradas son atribuibles a la precisión finita de la aritmética del computador y no al método propuesto.

Conclusiones

Al desarrollar e implementar un método para resolver el problema de la interpolación tridimensional en un campo escalar, se encuentran las siguientes conclusiones:

La utilización de una matriz de tres índices, para el almacenamiento de la información de un campo escalar en tres dimensiones, resulta sumamente compacta e implica un ahorro significativo en memoria computacional.

El método propuesto de interpolación tridimensional puede generalizarse a una malla que no sea uniforme, lo cual lo hace más flexible que las funciones existentes en los programas comerciales de simulación numérica.

El método desarrollado concuerda, de manera confiable, con los resultados entregados por Matlab.

Estas conclusiones garantizan la validez del método propuesto y a la vez abren nuevas oportunidades de desarrollo e investigación, como lo es la extensión de esta solución a volúmenes irregulares o dependientes del tiempo, así como modelos no lineales u otros tipos, aplicables a espacios no isotrópicos.

Agradecimientos

Al Instituto Tecnológico de Costa Rica y al Ministerio de Ciencia, Tecnología y Telecomunicaciones de Costa Rica por el financiamiento parcial para esta investigación.

Referencias

[1] F. J.García Jiménez, «Estudio comparativo de métodos de interpolación para el cálculo de la información mutua en el registro de imágenes médicas,» Universidad Politécnica de Cartagena, Cartagena, 2008. [ Links ]

[2] S. A.Ganihar, S.Joshi, N. Patil, U. Mudenagudiy M.Okade, «Voting-based decision framework for optimum selection of interpolation technique for 3d rendering applications,» de Students’ Technology Symposium (TechSym) , 2014 IEEE, 2014. [ Links ]

[3] F.Chaodong, Y.Peng y X.Bo, «Rapid geological modeling by using implicit 3D potential field interpolation method,» de Computer Design and Applications (ICCDA), 2010 International Conference on. IEEE, 2010. [ Links ]

[4] S. C.Chapra y R. P.Canale, Numerical methods for engineers, McGraw-Hill, 2010. [ Links ]

[5] J. H.Mathews y K. D.Fink, Métodosnuméricos con Matlab, Prentice Hall, 2000. [ Links ]

[6] A.Colsa, H.González y A.Moreno, «Caracterización de la calidad del aire en la ciudad de Valencia: Un análisis basado en la interpolación espacial de contaminantes,» de XVI Congreso Nacional de Tecnologías de Información Geográfica, 2014. [ Links ]

[7] MathWorks, «Documentation,» [En línea]. Available: Available: http://es.mathworks.com/help/pdf_doc/atlab/ atlab_refbook.pdf . [Último acceso: 01 Marzo 2016]. [ Links ]

[8] J.Glaria, «Interpolacioneslineales y multi-lineales,» Universidad Técnica Federico Santa María, Valparaíso, 1991. [ Links ]

[9] B.Herrmann-Priesnitz, W. R.Calderón-Muñoz y R.LeBoeuf, «Effects of urban configuration on the wind energy distribution over a building,» Journal of Renewable and Sustainable Energy, vol. 7, nº 3, p. 033106, 2015. [ Links ]

Recibido: 30 de Junio de 2016; Aprobado: 02 de Noviembre de 2016

Creative Commons License Este es un artículo publicado en acceso abierto bajo una licencia Creative Commons