2009-03-12 10 views
5

Actualmente estoy trabajando en un proyecto de visualización de datos. Mi objetivo es producir líneas de contorno, en otras palabras, líneas iso, a partir de datos reticulados.Los datos pueden ser temperatura, datos meteorológicos o cualquier tipo de otros parámetros ambientales, pero solo condición es que debe espaciarse regularmente. He buscado en Internet, sin embargo, no pude encontrar un buen algoritmo, pseudo-código o código fuente para producir curvas de nivel de grillas. ¿Alguien sabe una biblioteca, código fuente o un algoritmo para producir curvas de nivel a partir de datos reticulares? que será bueno si su propuesta tiene un buen rendimiento en tiempo de ejecución, no quiero esperar mis usuarios tanto :)Generando líneas de contorno a partir de datos espaciados regularmente

Editar: gracias por la respuesta, pero isolíneas tener algunas limitaciones como que no deben intersecta por lo que sólo la generación de curvas de bezier no logra mi objetivo.

+0

Ver mi respuesta en http://stackoverflow.com/questions/3180401/net-open-source-contour-plotting/13296170 – ProfNimrod

Respuesta

1

hay algunos contornos razonablemente buenos disponibles en GNUplot, si puede usar el código GPL que puede ayudar.

4

Ver esta pregunta: How to approximate a vector contour from an elevation raster?

Es un duplicado cercano, pero utiliza una terminología bastante diferente. Descubrirá que la cartografía y los gráficos por computadora resuelven muchos de los mismos problemas, pero usan una terminología diferente para ellos.

+0

Eso es un duplicado. "datos de cuadrícula" <=> "datos ráster", "datos" <=> "elevación", etc. –

0

Como sugiere el enlace de Paul Tomblin, las curvas de Bezier (que son un subconjunto de B-splines) son una solución madura para su problema. Si el rendimiento del tiempo de ejecución es un problema, las curvas de Bezier tienen la ventaja adicional de ser construibles a través del algoritmo de Casteljau muy rápido, en lugar de dibujarlas de acuerdo con las ecuaciones paramétricas. En caso de que esté trabajando con DirectX, tiene una función de biblioteca para el Castel de Casteljau, pero no debería ser difícil prepararse uno mismo utilizando las páginas web 1001 que lo describen.

0

Si sus datos se colocan a intervalos regulares, esto se puede hacer con bastante facilidad (suponiendo que entiendo su problema correctamente). Primero debe determinar a qué intervalo desea sus contornos. A continuación, cree la cuadrícula que va a usar para almacenar la información de contorno (supongo que solo se trata de un encendido/apagado simple o elevación en este tipo de datos de nivel de contorno), que debe ser un intervalo más pequeño que los datos de origen.

Ahora el truco aquí es compensar las 2 cuadrículas por 1/2 intervalo (no aparecerá realmente en un código como este, pero es el concepto que estoy tratando aquí) y comparar las 4 coordenadas que rodean el punto actual en la cuadrícula de datos de contorno que está calculando. Si alguno de los 4 puntos está en un intervalo de intervalo diferente, entonces ese "píxel" en la cuadrícula de contorno debe establecerse en verdadero (o el valor del rango de contorno que se cruza).

Con este método, habrá un problema cuando el intervalo sea demasiado fino, lo que provocará que varios contornos se superpongan entre sí.

Cuestiones relacionadas