Виталий Донцов – Программирование для Android и работа с датчиками в среде Delphi 11 (страница 13)
x:= StrToFloat (s);
s:= Memo1.Lines [i];
s:= Copy (s, Pos (» -», s) +1,100);
y:= StrToFloat (s);
x1:= kX*x;
y1:= Form1.Height – (Form1.Height – PlotGrid1.Height) – kY*y;
p.X:= x1;
p.Y:= y1;
Path1.Data.LineTo (p); // Очередная линия графика
end;
Надо заметить, что компонент рисует график сразу, причем самостоятельно масштабирует его во всю свою длину и ширину, так что можно просто наложить по размеру компонент на
Рис. 30. Построение графиков с помощью компонента Path1 на фоне компонента PlotGrid.
Ранее заданные оси координат (синия линии по Х оси) автоматически увеличены под новый график.
«Стереть» линии можно просто с помощью
Чтобы график не выходил за заданные масштабы и компонент не навязывал свой масштаб, данные для графика должны быть в пределах координатных заданных осей X и Y. Для того, чтобы задать масштаб компоненту нужно нарисовать вначале линии координат. Вводить данные можно из
Для масштабирования графика можно задать вводимый масштаб для данных через компоненты Edit:
kX:= StrToFloat (Edit1.Text);
kY:= StrToFloat (Edit2.Text);
Компонент
Из простого графика можно получить полноценный прибор – регистратор сигнала. Регстратор позволяет задавать время дискретизации, коэффициент усиления сигнала, отображать текущие данные и их счет, листинг данных в
var
p: TPointF;
i, rnd: Integer;
n: Single;
kY, x1,x2,y,y1:Double;
s: String;
begin
if Edit1.Text = «1» then //Случайные данные для проверки!
begin //На ширину Path = 119 данных по 3 точки
//Начальную точку устанавливаем к началу координат.
if NumberBox6.Value = 0 then
begin
NumberBox6.Value:= 1;
p.X:= 1;
p.Y:= Path1.Height -1;
Path1.Data.MoveTo (p);
end;
rnd:= Random (100) *5+10; //Случайные данные
NumberBox2.Value:= rnd;//Истинное значение выводится
kY:= StrToFloat (Edit2.Text); //Коэффициент Y
NumberBox5.Value:= NumberBox5.Value+1;//Счет данных
NumberBox6.Value:= NumberBox6.Value+1;//Счет для цикла
s:= FloatToStr(NumberBox4.Value*NumberBox5.Value) + '; ' + FloatToStr(NumberBox2.Value); //В Memo истинные данные
Memo1.Lines.Add (s);
//Рисуем график не выходя за пределы Path
x1:= NumberBox6.Value*3;// 3 Точки на 1 значение Х
y:= rnd*kY;
if y <= Path1.Height – 5 then //Коррекция Y
begin
y1:= Path1.Height – kY*y;
p.X:= x1;
p.Y:= y1;
if NumberBox6.Value> = 119 then //За пределы Х
begin
Path1.Data.Clear;
NumberBox6.Value:= 0;//Новый цикл! С начало
end
else
Path1.Data.LineTo (p) //Рисуем график – линию
end
else // Y За пределы графика
begin
p.X:= x1;
p.Y:= 2;
Path1.Data.MoveTo (p);//Прерывание графика