2009-12-28 15 views
8

Tengo un espacio 3D (x, y, z) con un parámetro adicional en cada punto (energía), dando 4 dimensiones de datos en total.Interpolación de un campo escalar en un espacio 3D

Me gustaría encontrar un conjunto de puntos x, y, z que correspondan a una superficie isoenergética encontrada mediante la interpolación entre los puntos conocidos.

La malla espacial tiene separación constante y rodea la superficie iso-energía por completo, sin embargo, que no ocupa un espacio cúbico (la malla ocupa un espacio más o menos cilíndrica)

velocidad no es crucial, puedo dejar este número de crujidos por un tiempo. Aunque estoy codificando en Python y NumPy, puedo escribir partes del código en FORTRAN. También puedo envolver las bibliotecas existentes de C/C++/FORTRAN para su uso en las secuencias de comandos, si existen tales bibliotecas.

Todos los ejemplos y algoritmos que he encontrado hasta ahora en línea (y en Recetas Numéricas) no alcanzan los datos 4D.

+0

BTW - Las recetas numéricas tienen algoritmos para cubrir esto en la edición más reciente: solo se trata de datos en 3D, es decir, datos almacenados en una única ubicación 3D. Todos los interpoladores de función de base radial en Recetas numéricas son aplicables aquí y se discuten en 3D (la mayoría se extiende a nD). –

+0

Sí, tienes razón. Mi edición es 1992 pero proporciona recetas (o analogías 2D) para la interpolación nD, siempre que la malla tenga 'valores de funciones tabuladas ... en los vértices de una matriz rectangular'. Tenía la impresión de que, dado que la malla (que es cierto, en el nivel fino, espaciada uniformemente con periodicidad rectangular) llena un espacio aproximadamente cilíndrico que las técnicas no se aplicarían. – Brendan

Respuesta

8

Hay bastantes opciones aquí ...

Con el fin de obtener su energía en su malla, que tendrá que utilizar algún tipo de interpolación. Shepard's method es un método común y razonablemente simple de implementar, y tiende a funcionar bien si su distribución de datos es razonable.

Una vez que haya hecho eso, tendrá que hacer alguna forma de generación de isosurface.

Hay algunas bibliotecas para facilitar esto. En particular, VTK incluye envoltorios de Python y tiene todas las herramientas necesarias para realizar estos dos pasos.

Para detalles sobre cómo esto se puede hacer en VTK, puede marcar vtkShepardMethod y vtkContourFilter.

1

¿Por qué no prueba la interpolación cuadrineal?

extienden la interpolación trilineal por otra dimensión. Siempre que un modelo de interpolación lineal se ajuste a sus datos, debería funcionar.

2

Dado que tiene una malla espacial con espaciado constante, puede identificar a todos los vecinos en lados opuestos de la isosuperficie. Elija alguna forma de interpolación (q.v. la respuesta de Reed Copsey) y busque la raíz a lo largo de la línea entre cada vecino.

Cuestiones relacionadas