![]() |
|
|
Регистрация Восстановить пароль |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
![]() |
|
|
Опции темы | Поиск в этой теме |
![]() |
#1 |
Пользователь
Регистрация: 21.11.2010
Сообщений: 20
|
![]()
Доброго Всем времени суток.
Уважаемые форумчане, помогите в решении следующей задачи : Имеется Tchart на котором (например) отображается график скорости объекта с частотой 100 Гц в течении 2-3 часов. В результате подробного анализа какого либо участка, возникает большая задержка по времени (TChart.OnZoom). Подскажите пожалуйста в каком направлении двигаться для достижения максимальной скорости обработки события OnZoom. FastSeries не помогает. Обработка в отдельном потоке тоже не помогает. Имеются следующие размышления на этот счет 1) Выводить не все точки (например if i mod 10=0 then ...), а при увеличении OnZoom скрывать TChart1 и показывать TChart2 на котором отображены все точки 2) Тоже самое что и в п.1 только при увеличении добавлять в выделенную область дополнительные точки для уточнения () ChartN.Series[I].ADDXY на интервале Zoom [] Если у кого имеются размышления на этот счет, с удовольствием ознакомлюсь и попробую реализовать, потаму как 1,2 пункт мне не сильно помогли С Уважением, Максим |
![]() |
![]() |
![]() |
#2 |
ПШП
Участник клуба
Регистрация: 15.07.2013
Сообщений: 1,926
|
![]()
А так ли уж обязательно анализировать сам TChart? Может лучше анализировать исходные данные?
|
![]() |
![]() |
![]() |
#3 |
Пользователь
Регистрация: 21.11.2010
Сообщений: 20
|
![]()
Я наверное не правильно выразился, Northener.
Дело в том, что исходные данные отображаются в виде графика в компоненте TChart. Например в компоненте TChart выводится по оси Х время, по оси Y скорость в М/с. В 1 секунду имеется 100 точек, продолжительность всего интервала от 2 до 3 часов следовательно на графике отображается от 720000 до 1080000 точек. При увеличении какой либо области возникает пауза, вопрос в том, как минимизировать эту паузу |
![]() |
![]() |
![]() |
#4 |
Пользователь
Регистрация: 02.05.2012
Сообщений: 45
|
![]()
много точек, варианты
1 проводить аппроксимацию при выводе всего графика (копить в буфер, а выводить прореживая, при увеличении куска графика увеличивать количество используемых точек из буфера, расположенных в увеличиваемом куске) 2 воспользоваться другими компонентами, например, Mitov PlotLab тут
Skype: cotseec
ICQ: 330-171-495 Последний раз редактировалось cotseec; 05.10.2013 в 00:33. |
![]() |
![]() |
![]() |
#5 |
Пользователь
Регистрация: 21.11.2010
Сообщений: 20
|
![]()
Очень интересные решения, cotseec
1) Первый вариант я использовал, в принципе работает, но при увеличении все равно возникают задержки, а особенно при движении графика (зажимаешь правую кнопку и двигаешь в нужную сторону - возникает задержка для прорисовки). 2) Я обязательно попробую PlotLab, надеюсь поможет. Огромное Вам спасибо за предложенные варианты) |
![]() |
![]() |
![]() |
#6 |
Старожил
Регистрация: 30.12.2009
Сообщений: 11,434
|
![]()
grebljmax, Задержка связана с количеством данным и скоростью прорисовки 100500 объектов. Попробуйте использовать интервалы времени.
т.е. график не будет отображать все 100500 точек сразу, а только точки с какой-то частотой. Допустим: каждый час. Все точки в периоде между 1-59 мин - игнорируются и не показываются на графике. С интервалом в 5 минут, показываются точки, идущие каждые пять минут, иные игнорируются. И так далее. Это даст вам некоторые плюсы: 1. Вы сможете детально отобразить график с любым интервалом точек во времени, без увеличения. 2. Скорость прорисовки и реакции графика будет фантастической =) |
![]() |
![]() |
![]() |
#7 |
Пользователь
Регистрация: 21.11.2010
Сообщений: 20
|
![]()
Огромное спасибо за варианты, "Человек_Борща"
Это вариант был бы просто супер, но к сожалению я не нашел как реализовать эту идею. Какого нибудь ChartN.SeriesList[i].Points в delphi нету, возможно нужно смотреть в сторону отрисовки серий и там настраивать видимость.. (GetASeries), но я так и не смог найти где и как. Если есть какие то идеи, предложите, я буду Вам при много благодарен С Уважением, Максим |
![]() |
![]() |
![]() |
#8 |
Старожил
Регистрация: 30.12.2009
Сообщений: 11,434
|
![]()
Создайте список, где будете невидимо хранить данные.
В нем же настройте выдачу выборки точек, идущих определенным интервалом. По этому списку, динамически, постройте серию в чарте. |
![]() |
![]() |
![]() |
#9 | |
Пользователь
Регистрация: 21.11.2010
Сообщений: 20
|
![]()
Насколько я понял, Вы имеете ввиду нужно создать класс в котором будут храниться данные и который будет выдавать заполненную серию с заданным шагом.
Тогда при увеличении Tchart будут стираться точки с большим шагом дискретизации,а записываться будут точки с более мелким шагом. Но процесс добавления и удаления точек тоже занимает очень много времени. Хотелось бы уйти от удаления и добавления, а решить проблему через видимость точек. Возможно есть идеи в этом направлении... Цитата:
Последний раз редактировалось grebljmax; 05.10.2013 в 12:58. |
|
![]() |
![]() |
![]() |
#10 | |
Старожил
Регистрация: 29.09.2009
Сообщений: 9,713
|
![]()
...проблема стара, а виноватят все tchart
![]() http://programmersforum.ru/showpost....27&postcount=9 http://programmersforum.ru/showpost....2&postcount=11 Цитата:
Разработки и научно-технические публикации :: Видеоблог :: Твиттер
Radar systems engineer & Software developer of industrial automation |
|
![]() |
![]() |
![]() |
|
![]() |
||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Определение скорости по видеосигналу | 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 |