Hello, Alexey V Bugrov! You wrote in conference fido7.ru.embedded to Nickita A Startcev on Mon, 25 May 2009 20:16:23 +0000 (UTC):
AVB>>> Это не так просто какможет показаться. Чтобы корректно и быстро AVB>>> строить данные в масштабах отличных от 1:1 нужно либо AVB>>> рассчитывать и кешировать "виды" для промежуточных расширений, AVB>>> либо на каждом отрезке искать минмум и максимум, что медленно.
NA>> Странно. Мне казалось, что минимум и максимум (в отличие, например, NA>> от медианы) ищется за линейное время.
AVB> А подумать? Чтобы правильно построить график длиной 10М точек на AVB> экране длиной в 1К точек все равно придется пербрать массив длиной AVB> 10М точек. При зуме в 2 раза, придется пербрать 5М точек и т.д. AVB> Без кешированных промежуточных видов будут вилы при любой попытке AVB> zoomin/zoomout.
Все нужные данные влезут в 160М памяти (4 канала по 32 бита float, это хоть и избыточно, но проще в реализации), что по сегодняшним меркам совсем не бог весть сколько за один проход чтения текстового файла. Дальше, даже если эти занные отсвопятся на диск, даже если их сразу записать на диск, уже известны и их пределы для отрисовки и все остальное работает быстро. Если покопаться в бинарных заголовках бинарных файлов, можно вытащить информацию о реальных масштабах, временах и единицах, ничего вообще ни в памяти ни на диске не хранить, а работать прямо из этих файлов - будет быстро. Промежуточный вариант - вообще не разбираться в заголовках, а только вычитывать и отрисовывать байты тоже хоть и не так удобен, но решает задачу.
dima