Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Циклический график с ластиком

13K
06 марта 2006 года
MihaZzz
18 / / 06.03.2006
Есть такая задача:
В одном потоке идет прием данных в буфер, в другом (по таймеру) идет обновление графика.
Если график доходит до конца экрана, рисование начинается от начала, при этом он затирает перед собой (ластиком) предыдущие линии.
Перерисовывать каждый раз весь график очень долго и замедляет работу программы. Поэтому необходимо обновлять минимальное кол-во данных (т.е. только новые).
Помогите найти пример или алгоритм, реализующий построение и обновление такого графика.
324
06 марта 2006 года
AndreySar
532 / / 01.08.2004
Цитата:
Originally posted by MihaZzz
Есть такая задача:
В одном потоке идет прием данных в буфер, в другом (по таймеру) идет обновление графика.
Если график доходит до конца экрана, рисование начинается от начала, при этом он затирает перед собой (ластиком) предыдущие линии.
Перерисовывать каждый раз весь график очень долго и замедляет работу программы. Поэтому необходимо обновлять минимальное кол-во данных (т.е. только новые).
Помогите найти пример или алгоритм, реализующий построение и обновление такого графика.



Перед тем как вывести новое значение графика стери ластиком спереди немного места

13K
07 марта 2006 года
MihaZzz
18 / / 06.03.2006
Цитата:
Originally posted by AndreySar
Перед тем как вывести новое значение графика стери ластиком спереди немного места


Так я так и делаю!
Но мне кажется график портится в месте стыковки новых и старых линий (я ведь обновляю не весь график, а только последние данные).

Мой алгоритм примерно следующий.:!!!:
Т.к. график цикличен (при заполнении новые значения заменяют старые), то буфер тоже фиксированного размера и характерезуется следующими параметрами, например:
nLength - размер буфера
nCount - кол-во данных в буфере
nFirst - индекс (смещение) первого элемента буфера
При прорисовке графика я запоминаю последние значения:
nLastCount - последний nCount
nLastFirst - последний nFirst

Допустим буфер уже заполнен. Тогда новое значения будет добавляться на место первого элемента. При этом значение nCount уже не меняется, а смещается индекс первого элемента в буфере.
Отсюда, зная последние параметры буфера (nLastCount и nLastFirst), при новом обновлении графика по таймеру можно узнать кол-во новых значений delta.
Если буфер полный (nCount==nLength), то
delta = nFirst - nLastFirst
иначе
delta = nCount - nLastCount
Вот по этой delta я и обновляю график.
Может что-то неправильно в алгоритме?
:-?

Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог