Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 05.10.2013, 16:34   #11
grebljmax
Пользователь
 
Регистрация: 21.11.2010
Сообщений: 20
По умолчанию

На самом деле мне все это нужно для анализа тренировочного процесса в пост обработке т.е. у меня имеются данные с тренировки, которая проходила как максимум 3 часа, тренер заходит в программу выбирает данные, и с помощью CheckListBox выбирает нужный ему измеренный параметр. Например скорость, углы вращения, дистанцию, ускорения и т.п. Частота датчика 100 Гц. Данных куча. Для отображения графика всей тренировки в общем виде достаточно и шага 1 точка в секунду. Но когда происходит событие на Tchart OnZoom и выбирается интервал от 2 минут и меньше, нужно выводить все точки, иначе будет прямая линия. Если есть какие то наработки по построению графиков, огромная просьба показать или подтолкнуть на рациональный путь...Неужели если рисовать на Canvas и реализовывать функцию Zoom самому, анализ будет быстрее?
grebljmax вне форума Ответить с цитированием
Старый 05.10.2013, 17:05   #12
raxp
Старожил
 
Регистрация: 29.09.2009
Сообщений: 9,713
По умолчанию

...вы не читаете, что вам пишут. Проводите децимацию при отображении точек на определенном временном интервале, нет смысла хранить 1000 точек в одном экранном пикселе, если так до вас быстрее дойдет. И ни в коем разе не храните все данные в чарте.

Для того, чтобы поняли, даже в SCADA архивные тренды не выводят все точки, а подгружают для визуализации только определенный заданный участок, а архивы там до нескольких лет доходят с шагом в десятки миллисекунд.
Разработки и научно-технические публикации :: Видеоблог :: Твиттер
Radar systems engineer & Software developer of industrial automation
raxp вне форума Ответить с цитированием
Старый 05.10.2013, 17:34   #13
grebljmax
Пользователь
 
Регистрация: 21.11.2010
Сообщений: 20
По умолчанию

Я это понимаю, уважаемый Raxp, только как провести децимацию при отображении точек? Я так понимаю нужно в потоке анализировать границы выделенной области, и если мы анализируем короткий участок, на котором нам нужны подробности, мы выключаем децимацию , варианты как это осуществить

1) удаляем все усредненные прореженные точки из Series или просто очищаем Series и добавляем туда все имеющиеся данные

2) Добавляем на этом участке недостающие точки (но при движении графика при зажатой правой кнопке мыши, очень сильно тормозит эта функция)

3) Создаем для 1 параметра 3 (или более) Series с разной частотой вывода точек (Но очень загрузится буфер Chart - а )

Очень интересен механизм реализации предложенной децимации. Извиняюсь, если я чего то не до понимаю.
grebljmax вне форума Ответить с цитированием
Старый 05.10.2013, 18:08   #14
raxp
Старожил
 
Регистрация: 29.09.2009
Сообщений: 9,713
По умолчанию

1- высчитываем сколько экранных пикселей вмещается по горизонтали на участке визуализации (области отображения тренда)
2- проходимся по массиву данных и делаем выборку из заданного временного участка для отображения.

Тупой подход: экранных точек 1000, данных 10000, тогда следует выбрать каждую 10000/1000=10 точку, однако это приведет к искажению формы из-за возможных пропусков экстремумов в сигнале.
Умный подход: делаем выборку на заданном временном интервале только экстремумы - характерные перегибы, применяем дополнительно полином сглаживания при окончательном выводе в серию чарта.

3- при событиях ZOOM/UNZOOM узнаем какой временной участок хочет пользователь увидеть и повторяем с пункта 1.

Ферштеен?
Разработки и научно-технические публикации :: Видеоблог :: Твиттер
Radar systems engineer & Software developer of industrial automation
raxp вне форума Ответить с цитированием
Старый 05.10.2013, 18:30   #15
grebljmax
Пользователь
 
Регистрация: 21.11.2010
Сообщений: 20
По умолчанию

Огромное спасибо за умное решение Raxp. Только маленькое уточнение, после выполнение пунктов 1 и 2 мы очищаем старые данные в Series (Chart1.SeriesList[i].Clear) и на выбранном интервале выводим в эту же серию новые (уточненные) данные или же добавляем в имеющуюся недостающие точки? Как лучше сделать?

Все это будет происходить при событиях OnZoom или UndoZoom.
grebljmax вне форума Ответить с цитированием
Старый 05.10.2013, 19:29   #16
raxp
Старожил
 
Регистрация: 29.09.2009
Сообщений: 9,713
По умолчанию

Не обязательно. Если экранные размеры окна отображения не изменились (пользователь не разворачивал форму тренда, не изменял его размер), то отображать все равно придется тоже самое количество точек, при этом очищать серию-контейнер не нужно, ведь мы имеем доступ к каждой точке через series.yValue[i] и series.хValue[i]. Этим мы дополнительно экономим время.

Нужно всего лишь подставить другие значения в соответствующие индексы массива (контейнера серии) из пункта 2.
Разработки и научно-технические публикации :: Видеоблог :: Твиттер
Radar systems engineer & Software developer of industrial automation
raxp вне форума Ответить с цитированием
Старый 05.10.2013, 22:06   #17
grebljmax
Пользователь
 
Регистрация: 21.11.2010
Сообщений: 20
По умолчанию

Огромное Вам спасибо Raxp. Попробую реализовать данную идею, о результате обязательно сообщу.
grebljmax вне форума Ответить с цитированием
Старый 05.10.2013, 22:20   #18
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 18,922
По умолчанию

Наверняка в базе данные хранятся. Почему BDChart не использовать?
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Старый 05.10.2013, 23:02   #19
grebljmax
Пользователь
 
Регистрация: 21.11.2010
Сообщений: 20
По умолчанию

Не совсем Аватар. Все хранится в типизированных файлах, поэтому проще использовать Chart.
grebljmax вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Определение скорости по видеосигналу N0Faceg Помощь студентам 7 24.04.2013 14:16
WiFi увеличение скорости misher Компьютерное железо 2 09.05.2011 23:38
Индексирование таблиц и увеличение скорости работы CodeNOT PHP 3 29.04.2011 11:57
С++ под Linux увеличение скорости работы с болванкой Yulka Помощь студентам 0 16.12.2009 21:42
Уменьшение загрузки ЦП и увеличение скорости программы. Shadow_1329 Gamedev - cоздание игр: Unity, OpenGL, DirectX 80 18.08.2009 15:22