Cómo trazar grandes vectores de datos con precisión en todos los niveles de zoom en tiempo real?

StackOverflow https://stackoverflow.com/questions/508666

Pregunta

Tengo grandes conjuntos de datos (datos de 10 Hz, por lo 864k puntos por 24 horas) que necesito para trazar en tiempo real. La idea es que el usuario puede hacer zoom y panorámica en parcelas muy detallados de dispersión.

Los datos no es muy continuo y hay espigas. Dado que el conjunto de datos es tan grande, que no puede trazar cada punto cada vez que se actualiza la trama.

Pero también puedo no sólo trazar cada punto enésimo o de lo contrario se perderá las características principales como púas grandes, pero cortos.

Matlab lo hace bien. Puede darle un vector 864k lleno de ceros y acaba de establecer un punto cualquiera a 1 y va a trazar correctamente en tiempo real con los zooms y sartenes.

¿Cómo Matlab hacerlo?

Mi sistema de destino es Java, por lo que estaría generando puntos de vista de esta parcela de oscilación / Java2D.

¿Fue útil?

Solución

Usted debe tratar el archivo de MATLAB central:

https://mathworks.com/matlabcentral/fileexchange/15850-dsplot -downsampled-trama

Del autor:

Esta versión de "trama" le permitirá visualizar los datos que tiene muy gran número de elementos. Trazado gran conjunto de datos hace que sus gráficos lento, pero la mayoría de veces no se necesita toda la información que se muestra en el diagrama. Su pantalla sólo tiene tantos píxeles, y sus ojos no será capaz de detectar cualquier información que no se reflejan en la pantalla.

Esta función disminuir la resolución de los datos y la trama sólo un subconjunto de los datos, mejorando así la necesidad de memoria. Cuando la trama está ampliada, más información se visualiza. Algunos trabajos se hace para asegurarse de que los valores atípicos son capturados.

Sintaxis:

dsplot(x, y)  
dsplot(y)  
dsplot(x, y, numpoints)  

Ejemplo:

x =linspace(0, 2*pi, 1000000);  
y1=sin(x)+.02*cos(200*x)+0.001*sin(2000*x)+0.0001*cos(20000*x);  
dsplot(x,y1);

Otros consejos

No sé cómo lo hace Matlab, pero me gustaría empezar con Quadtrees .

volcar todos los puntos de datos en el árbol cuádruple, a continuación, para rendir a un nivel dado del zoom, se puede caminar por el árbol cuádruple (a partir de las áreas que se superponen lo que está viendo) hasta llegar a áreas que son comparables al tamaño de un píxel. Pegarse un píxel en el medio de esa zona.

añadido: Hacer el dibujo con OpenGL / JOGL también le ayudará a obtener el dibujo más rápido. Especialmente si se puede predecir la panorámica, y acumular los puntos para mostrar en una lista de visualización o algo así, de modo que usted no tiene que hacer ningún trabajo de la CPU para los nuevos marcos.

Los datos 10Hz significa que sólo tiene que trazar 10 fotogramas por segundo. Debe ser fácil, ya que muchos juegos de lograr> 100 fps con gráficos mucho más complejas.

Si traza 10 píxeles por segundo por cada posible punto de datos puede mostrar un minuto valor de datos utilizando una amplia widget de 600 píxeles. Si guarda el índice del número 600 a última muestra que debe ser fácil para dibujar los últimos datos.

Si usted no tiene un nuevo punto de datos de cada décimo de un segundo que tiene que llegar a una forma de insertar una técnica de punto interpolado. Tres opciones vienen a la mente:

  1. Repetir la última de datos punto.
  2. Inserte un "vacío" de datos punto. Esto hará que las brechas en el gráfico.
  3. No actualizar el gráfico hasta que llegue la próxima datos de coma. A continuación, insertar todos los píxeles que no sacó a la vez, con interpolación lineal entre los puntos de datos.

Para hacer la animación uso suave de doble búfer . Si el idioma de destino es compatible con un widget de lona que probablemente soporta doble búfer.

Cuando el zoom que tiene las mismas tres opciones que el anterior, ya que los puntos de datos con zoom no son continuas, incluso si los puntos de datos originales eran.

Esto podría ayudar de su aplicación en Java.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top