Визуализация большого объема данных с помощью Pyglet - PullRequest
0 голосов
/ 08 января 2020

У меня есть несколько больших CSV-файлов, содержащих данные, записанные радаром в море. Радар показывает полученное эхо на 2048 разных ракурсах. Каждый угол может отображать данные для 512 различных диапазонов. Для каждого диапазона интенсивность эха сохраняется в виде значений от 0 до 255.

Чтобы визуализировать данные, я пытаюсь использовать Pyglet с пакетной визуализацией. После отображения первого поворота (2048 углов) программа должна продолжить просмотр данных, показывая самые новые записи. Поэтому каждый раз, когда я отображаю угол, я пытаюсь удалить следующий угол из списка вершин, чтобы он не рисовался поверх предыдущего вращения.

Поскольку существует вероятность 2048 * 512 показаний в Вращением я создал 2D-список 0f 2048 на 512 для хранения списков вершин, так что я могу удалить определенные типы c. См. Следующий фрагмент кода.

import pyglet

win = pyglet.window.Window(1000, 1000)
batch = pyglet.graphics.Batch()

def update(dt):
    stepSize = 10000 # Save the first 10000 measurements in the batch before drawing it
    for i in range(Counter.cnt, Counter.cnt + stepSize):

        (* Calculate the pixel positions of each measurements from the angle and range *)

        # Add to batch and save in 2D list
        arr[angle][currentRange] = batch.add(2, pyglet.gl.GL_LINES, None,
                  ('v2f', (pts[0][0], pts[0][1], pts[1][0], pts[1][1])))

        # Delete everything from the next angle
        for n in range(0, len(arr[nextAngle])):
            try:
                arr[nextAngle][n].delete()
            except:
                pass

@win.event
def on_draw():
    win.clear()
    batch.draw()

if __name__ == '__main__':
    pyglet.clock.schedule_interval(update, 1/120.0)
    pyglet.app.run()

Возможно, измерения должны были быть нарисованы в виде многоугольников или треугольников, но поскольку углы так близки, я использовал линии.

Это дает мне довольно хороший результат для первой пары вращений:

Radar_pyglet1

Капли представляют окружающие острова на море. Однако после некоторых поворотов программа замедляется, и дисплей выглядит так:

Radar_pyglet2

At На этом изображении лодка повернулась, и поэтому положение островков на снимке также изменилось. Однако, как видно на картинке, после поворотов на дисплее отображается много мелких точек, которых там быть не должно. Кроме того, части измерений частично стираются почти случайным образом.

В чем может быть проблема, и какой может быть лучший способ отображения данных?

1 Ответ

0 голосов
/ 10 января 2020

Я все еще не совсем уверен, что вызывает проблему, но я нашел обходной путь.

Вместо использования VertexList.delete() я меняю цвет vertexList на черный:

# Change color if vertixList exists, otherwise create new 
if arr[angle][currentRange != 0:
    arr[angle][currentRange].colors = [255, 255, 255, 255, 255, 255]
else:
    arr[angle[currentRange] = batch.add(2, pyglet.gl.GL_LINES, None,
        ('v2f', (pts[0][0], pts[0][1], pts[1][0], pts[1][1])),
        ('c3B', (255, 255, 255, 255, 255, 255)))

# Change color of the next angle
for n in range(0, len(arr[nextAngle])):
    try:
        arr[nextAngle][n].colors = [0, 0, 0, 0, 0, 0]
    except:
        pass

Используя это я не получаю ту же проблему.

...