| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > Delphi: Звук, графика и видео > TChart и Array |
| Автор: Yump 11.1.2008, 18:33 | ||
| Подскажите алгоритм плз. Есть два динамических массива, куда пишутся значения X и Y. Эти же значения выводятся на TChart. Всё делается по таймеру. На график значения выводятся в трех режимах 1) С "прокруткой" - последние значения удаляются, новый добавляются, если количество точек стало больше чем например 100; 2) Данные просто добавляются, но если на время переключить на п.1, а потом вернуться, то первоначальных данных на графике не будет; 3) Если запись данных только началась или не достигла "прокрутки" (как в п.1), то значения добавляются как в п.2, а если шла "прокрутка", то на график сначала выводятся все значения X, Y записанные в массивах, а затем продолжается запись новых значений, то есть значения выводятся с самого начала записи. Конструкция примерно такая:
Как сделать 3-ий вариант??? Помогите, пожалуйста! |
| Автор: remax 12.1.2008, 00:37 |
Нет проблем: 1)Обработай событие переключения режима: - Очисти серию - В цикле добавь в нее содержимое массивов 2) В твоей обработке совмести режим 3 и режим 2 (2 и 1 соответствеено значения RadioGroup1.ItemIndex) |
| Автор: Yump 12.1.2008, 08:14 | ||||
| remax Спасибо за ответ! Сделал так: Добавил событие -
список выглядит так -
Если оставить пункт 2 пустым, то массив отрисовывается, а если сделать как показано выше, то отрисовывается неправильно - сначала идет скачок, потом прямая линия, потом добавляются новые значения, значения записанные ранее на график не добавляются. Где я ошибся ? |
| Автор: Yump 12.1.2008, 12:42 | ||||||
Просто где-то читал, что предпочтительнее использовать цикл while вместо for, хотя, может быть я и ошибаюсь.
В том-то и дело, что X меняется с разным шагом, а массивы всё равно нужны, так как запись данных возможна и без отображения в виде графика.
Всё равно - вот такая ерунда (если переключить в 3-ий режим после начала прокрутки): ![]() |
| Автор: Yump 12.1.2008, 12:40 | ||||||
Просто где-то читал, что предпочтительнее использовать цикл while вместо for, хотя, может быть я и ошибаюсь.
В том-то и дело, что X меняется с разным шагом, а массивы всё равно нужны, так как запись данных возможна и без отображения в виде графика.
Всё равно - вот такая ерунда (если переключить в 3-ий режим после начала прокрутки): ![]() |
| Автор: Yump 12.1.2008, 13:15 | ||||||||||||
читал где-то, что предпочтительнее использовать цикл while, хотя может быть я и ошибаюсь.
В том и дело, что X меняется с разным шагом, значения все равно должны записываться, хотя могу на графике и не отображаться.
всё равно вот такая ерунда получается: http://ipicture.ru/uploads/080112/RnhWD2e1nL.jpg Добавлено через 9 минут и 8 секунд
читал где-то, что предпочтительнее использовать цикл while, хотя может быть я и ошибаюсь.
В том и дело, что X меняется с разным шагом, значения все равно должны записываться, хотя могу на графике и не отображаться.
всё равно вот какая-то ерунда получается... :( |
| Автор: Yump 12.1.2008, 12:51 | ||||||
читал где-то, что предпочтительнее использовать цикл while, хотя может быть я и ошибаюсь.
В том и дело, что X меняется с разным шагом, значения все равно должны записываться, хотя могу на графике и не отображаться.
всё равно вот такая ерунда получается: ![]() |
| Автор: Yump 12.1.2008, 13:30 |
| Удалите, пожайлуйста, 3 лишних сообщения. |
| Автор: remax 12.1.2008, 14:36 | ||
| 1) Цикл While заведомо медленнее, чем For. Так как в For только один раз просчитывается заголовок (в начале цикла) и потом тело цикла выполняется заданное количество раз. А в цикле While перед каждой иттерацией проверяется условие в заголовке цикла. Поэтому, в тех случаях когда мы четко знаем сколько раз нужно выполнить тело цикла, предпочтительней For. 2) Судя по твоему рисунку у тебя проскакивает точка с нулевой координатой X. Посмотри внимательно как ты заполняешь массив, нет ли ошибок в индексах.... Добавлено через 6 минут и 30 секунд 3) Раз не меняем идеологию, значит слегка оптимизируем твой код.
|
| Автор: Yump 12.1.2008, 14:45 | ||||||
Спасибо, буду знать, не помню откуда я это взял...
С этой ошибкой разобрался. Невнимательность. В разделе case координата X умножалась, а в цикле построения графика из массива нет... Единственное, что ещё хотел спросить - зачем эта строка?
|
| Автор: remax 12.1.2008, 14:51 | ||
Чтобы гарантированно обновилась картинка в TChart. Предполагается, что должно происходить при каждом изменении в сериях данных, но, из-за внутренней оптимизации в глубинах TChart, это далеко не факт.... Добавлено через 1 минуту и 43 секунды Если проблема решена, не забудь отметить это в теме, чтобы ее закрыть как решеную... |
| Автор: Yump 12.1.2008, 15:24 |
| Всё ясно, большое спасибо за помощь! |