![]() |
|
Модераторы: Snowy, Alexeis, MetalFan |
![]()
|
|
| Yump |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 21 Регистрация: 8.1.2008 Репутация: нет Всего: нет |
Подскажите алгоритм плз.
Есть два динамических массива, куда пишутся значения X и Y. Эти же значения выводятся на TChart. Всё делается по таймеру. На график значения выводятся в трех режимах 1) С "прокруткой" - последние значения удаляются, новый добавляются, если количество точек стало больше чем например 100; 2) Данные просто добавляются, но если на время переключить на п.1, а потом вернуться, то первоначальных данных на графике не будет; 3) Если запись данных только началась или не достигла "прокрутки" (как в п.1), то значения добавляются как в п.2, а если шла "прокрутка", то на график сначала выводятся все значения X, Y записанные в массивах, а затем продолжается запись новых значений, то есть значения выводятся с самого начала записи. Конструкция примерно такая:
Как сделать 3-ий вариант??? Помогите, пожалуйста! |
|||
|
||||
| remax |
|
|||
|
Доцент ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 686 Регистрация: 7.4.2002 Где: Украина, Харьков Репутация: нет Всего: 5 |
Нет проблем: 1)Обработай событие переключения режима: - Очисти серию - В цикле добавь в нее содержимое массивов 2) В твоей обработке совмести режим 3 и режим 2 (2 и 1 соответствеено значения RadioGroup1.ItemIndex) -------------------- Как бы ты не старался быть хорошим и правильным человеком с принципами и уважительным отношением к другим, всегда найдется кто-то, кто бросит в тебя какашку |
|||
|
||||
| Yump |
|
||||
|
Новичок Профиль Группа: Участник Сообщений: 21 Регистрация: 8.1.2008 Репутация: нет Всего: нет |
remax
Спасибо за ответ! Сделал так: Добавил событие -
список выглядит так -
Если оставить пункт 2 пустым, то массив отрисовывается, а если сделать как показано выше, то отрисовывается неправильно - сначала идет скачок, потом прямая линия, потом добавляются новые значения, значения записанные ранее на график не добавляются. Где я ошибся ? |
||||
|
|||||
| remax |
|
||||||
|
Доцент ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 686 Регистрация: 7.4.2002 Где: Украина, Харьков Репутация: нет Всего: 5 |
1) процедуру RadioGroup1Click лучше написать так:
мелочь, но приятно 2) в твоей обработке
должно быть нормально
А в принципе, если у тебя X меняется с равным шагом, я бы поменял идеологию: Все точки добавлять в серию (тогда и массивы не нужны), а в зависимости от режима менять диапазон отображения по X. По умолчанию там выставлено авто определение минимума и максимума. Это сообщение отредактировал(а) remax - 12.1.2008, 12:03 -------------------- Как бы ты не старался быть хорошим и правильным человеком с принципами и уважительным отношением к другим, всегда найдется кто-то, кто бросит в тебя какашку |
||||||
|
|||||||
| Yump |
|
||||||
|
Новичок Профиль Группа: Участник Сообщений: 21 Регистрация: 8.1.2008 Репутация: нет Всего: нет |
Просто где-то читал, что предпочтительнее использовать цикл while вместо for, хотя, может быть я и ошибаюсь.
В том-то и дело, что X меняется с разным шагом, а массивы всё равно нужны, так как запись данных возможна и без отображения в виде графика.
Всё равно - вот такая ерунда (если переключить в 3-ий режим после начала прокрутки): |
||||||
|
|||||||
| Yump |
|
||||||
|
Новичок Профиль Группа: Участник Сообщений: 21 Регистрация: 8.1.2008 Репутация: нет Всего: нет |
Просто где-то читал, что предпочтительнее использовать цикл while вместо for, хотя, может быть я и ошибаюсь.
В том-то и дело, что X меняется с разным шагом, а массивы всё равно нужны, так как запись данных возможна и без отображения в виде графика.
Всё равно - вот такая ерунда (если переключить в 3-ий режим после начала прокрутки): |
||||||
|
|||||||
| Yump |
|
||||||||||||
|
Новичок Профиль Группа: Участник Сообщений: 21 Регистрация: 8.1.2008 Репутация: нет Всего: нет |
читал где-то, что предпочтительнее использовать цикл while, хотя может быть я и ошибаюсь.
В том и дело, что X меняется с разным шагом, значения все равно должны записываться, хотя могу на графике и не отображаться.
всё равно вот такая ерунда получается: http://ipicture.ru/uploads/080112/RnhWD2e1nL.jpg Добавлено через 9 минут и 8 секунд
читал где-то, что предпочтительнее использовать цикл while, хотя может быть я и ошибаюсь.
В том и дело, что X меняется с разным шагом, значения все равно должны записываться, хотя могу на графике и не отображаться.
всё равно вот какая-то ерунда получается... :( |
||||||||||||
|
|||||||||||||
| Yump |
|
||||||
|
Новичок Профиль Группа: Участник Сообщений: 21 Регистрация: 8.1.2008 Репутация: нет Всего: нет |
читал где-то, что предпочтительнее использовать цикл while, хотя может быть я и ошибаюсь.
В том и дело, что X меняется с разным шагом, значения все равно должны записываться, хотя могу на графике и не отображаться.
всё равно вот такая ерунда получается: |
||||||
|
|||||||
| Yump |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 21 Регистрация: 8.1.2008 Репутация: нет Всего: нет |
Удалите, пожайлуйста, 3 лишних сообщения.
|
|||
|
||||
| remax |
|
|||
|
Доцент ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 686 Регистрация: 7.4.2002 Где: Украина, Харьков Репутация: нет Всего: 5 |
1) Цикл While заведомо медленнее, чем For. Так как в For только один раз просчитывается заголовок (в начале цикла) и потом тело цикла выполняется заданное количество раз. А в цикле While перед каждой иттерацией проверяется условие в заголовке цикла. Поэтому, в тех случаях когда мы четко знаем сколько раз нужно выполнить тело цикла, предпочтительней For.
2) Судя по твоему рисунку у тебя проскакивает точка с нулевой координатой X. Посмотри внимательно как ты заполняешь массив, нет ли ошибок в индексах.... Добавлено через 6 минут и 30 секунд 3) Раз не меняем идеологию, значит слегка оптимизируем твой код.
-------------------- Как бы ты не старался быть хорошим и правильным человеком с принципами и уважительным отношением к другим, всегда найдется кто-то, кто бросит в тебя какашку |
|||
|
||||
| Yump |
|
||||||
|
Новичок Профиль Группа: Участник Сообщений: 21 Регистрация: 8.1.2008 Репутация: нет Всего: нет |
Спасибо, буду знать, не помню откуда я это взял...
С этой ошибкой разобрался. Невнимательность. В разделе case координата X умножалась, а в цикле построения графика из массива нет... Единственное, что ещё хотел спросить - зачем эта строка?
|
||||||
|
|||||||
| remax |
|
|||
|
Доцент ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 686 Регистрация: 7.4.2002 Где: Украина, Харьков Репутация: нет Всего: 5 |
Чтобы гарантированно обновилась картинка в TChart. Предполагается, что должно происходить при каждом изменении в сериях данных, но, из-за внутренней оптимизации в глубинах TChart, это далеко не факт.... Добавлено через 1 минуту и 43 секунды Если проблема решена, не забудь отметить это в теме, чтобы ее закрыть как решеную... -------------------- Как бы ты не старался быть хорошим и правильным человеком с принципами и уважительным отношением к другим, всегда найдется кто-то, кто бросит в тебя какашку |
|||
|
||||
| Yump |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 21 Регистрация: 8.1.2008 Репутация: нет Всего: нет |
Всё ясно, большое спасибо за помощь!
|
|||
|
||||
![]()
|
| Правила форума "Delphi: Звук, графика и видео" | |
|
|
Запрещено: 1. Публиковать ссылки на вскрытые компоненты 2. Обсуждать взлом компонентов и делится вскрытыми компонентами
FAQ раздела лежит здесь! Если Вам помогли и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, Girder, Snowy. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | Delphi: Звук, графика и видео | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |