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

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

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 06.11.2010, 15:44   #1
Svyazist
Новичок
Джуниор
 
Регистрация: 06.11.2010
Сообщений: 1
Сообщение Delphi (Построение графика в реальном времени)

Доброго всем времени суток.
Дано: Функция x=a*exp(-t*(1/b))*sin(wt). Задаётся интервал времени t.
Выполняется цикл расчёта x(t) для 60 значений t (где t выводится в реальном времени).
Значение t c одновременно подсчитанным x выводится в Memo1. График же (Series1.AddXY(t,a*exp(-t*(1/b))*sin(w*t),'',clRed))) внесённый в этот цикл, строится в самом конце, после завершения цикла.

Вопрос: 1) Как осуществить построение каждой точки в процессе выполнения цикла с тем же интервалом t.
2) Как программно (напр. нажав кнопку) прервать цикл.
Svyazist вне форума Ответить с цитированием
Старый 06.11.2010, 18:13   #2
p51x
Старожил
 
Регистрация: 15.02.2010
Сообщений: 15,709
По умолчанию

Цитата:
1) Как осуществить построение каждой точки в процессе выполнения цикла с тем же интервалом t.
Код:
Series1.AddXY(t,a*exp(-t*(1/b))*sin(w*t),'',clRed)
Цитата:
2) Как программно (напр. нажав кнопку) прервать цикл.
Добавить в условие цикла проверку булевой переменной. По нажатию на кнопку устанавливать (сбрасывать) эту переменную.
p51x вне форума Ответить с цитированием
Старый 02.10.2012, 09:52   #3
Vitamaster
 
Регистрация: 02.10.2012
Сообщений: 5
По умолчанию график в реальном времени

Помогите пожалуйста понять поведение компонента TChart.
Цель: построение "двигающего" графика в реальном времени.
Проба 1:
procedure TForm1.Timer1Timer(Sender: TObject);
begin
Form1.Series1.Add(random(1000),'',c lred);
Form1.Edit3.Text:=inttostr(Form1.Se ries1.count);
end;

При данном коде рисуется график, в поле добавляются новые точки, сам график сжимается отображая все точки графика.

Теперь делаю так чтобы при добавлении новой точки, удалялась самая первая точка, тем самым желая отобразить на экране только необходимое количество точек и получить "движение" графика в реальном времени.
Проба 2:
procedure TForm1.Timer1Timer(Sender: TObject);
begin
Form1.Series1.Add(random(1000),'',c lred);
Form1.Series1.Delete(Form1.Series1. FirstValueIndex);
Form1.Edit3.Text:=inttostr(Form1.Se ries1.count);
end;

Но желаемого результата нет. Происходит следующая ситуация:
Цикл №1:
- Добавляется новая точка
- Удаляется первая точка
- Количество точек не изменяется
- график смещается на одну точку влево

Цикл №2:
- НЕ (!) добавляется новая точка на экране
- Удаляется первая точка на экране
- Количество точек не изменяется (в свойстве Count)
- график НЕ смещается, а перемаштабируется по оси Х по имеющимся точкам на экране.

Остальные циклы идентичны Циклу№2. После каждого цикла количество точек на экране уменьшается и в итоге остается одна вертикальная линия. Почему так происходит не понимаю
Vitamaster вне форума Ответить с цитированием
Старый 02.10.2012, 12:48   #4
Vitamaster
 
Регистрация: 02.10.2012
Сообщений: 5
По умолчанию

В принципе я уже сам нашел выход, при использовании метода AddXY вместо Add все начинает работать как положено
Почему же при Add не работает остается непонятным...
Vitamaster вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Издеваемся над виндой в реальном времени Fainder Свободное общение 12 15.03.2010 15:22
Построение графика [Delphi] StudeHt Помощь студентам 7 23.12.2009 21:11
Построение графика в Delphi сер4ей Помощь студентам 0 25.04.2009 15:15
переброс данных из Excel в Delphi в реальном режиме времени Машутка Общие вопросы Delphi 3 27.09.2008 07:19