Доброго времени суток.
Не знаю, помогу чем-нить или нет, но я как-то рисовал так.
procedure TSFAWindow.DrawCurve;
const
CurvName : array[1..4] of String = ('S-компонента','P-компонента','Среднее','');
var
i, j, Mask : Integer;
begin
i := 1;
Mask := i;
GetRelXY;
while Result[ i ] <> nil do begin
with PaintBox1.Canvas do begin
Pen.Color := SFAColors[ i+2]; // установим цвет кривой
if (Mask and CurrMask) <> 0 then begin // пока есть данные
CalcXY(Result[ i ], 0); // найдем начало кривой
MoveTo(X+PlotLeft, Y+PlotTop); // установим позицию пера
for j:=1 to Result[ i ].Count-1 do begin // для всех точек
CalcXY(Result[ i ], j); // считаем положение
LineTo(X+PlotLeft, Y+PlotTop); // проводим линию
end;
Font.Color := SFAColors[ i+2]; // цвет типа кривой
TextOut(PlotLeft + (i-1)* 120, PlotBottom + 25, CurvName[ i ]);
end;
end;
Inc(i); // переход к следующему графику
Mask := Mask Shl 1;
end;
end;
procedure TSFAWindow.GetRelXY;
begin
xRel := (PlotRight - PlotLeft)/(CurrBorder.xMax - CurrBorder.xMin);
yRel := (PlotBottom - PlotTop)/(CurrBorder.yMax-CurrBorder.yMin);
end;
Plotхххх - границы области рисования, CurrBorder - запись с минимальными и максимальными значениями аргумента и функции.
procedure TSFAWindow.CalcXY(C: TCurveData; Index : Integer);
var
P : TCurvePoint;
begin
P := C[Index];
x := Round((P.Arg - CurrBorder.xMin)*xRel);
y := Round((-P.Func[Integer(ActiveInterior)] + CurrBorder.yMax)*yRel);
end;
Последний метод определяет экранные координаты для LineTo. Правда, это для статической кривой. Если же она должна меняться со временем, то, скорее всего, потребуется постоянный пересчет xRel и yRel, которые являются, по-сути, масштабными коэффициентами по осям.
Удачи!
PS Возможно не все будет очевидным, но код рабочий, взят из проекта.
Указанные методы вызываются из
procedure TSFAWindow.ShowGraphicsResults;
begin
if Result[1] = nil then Exit; // нет данных для отображения
CurrMask := 1; // отбразим пропускание
if Result[2] <> nil then CurrMask := 3; // отображать пропускание, отражение и среднее
SetFullBorder; // установим полные границы графика
CalcPrecision; // вычислим точность отображения оцифровки осей
DrawGrid;
DrawCurve;
end;
Здесь Result - массив результатов.
Другие языки программирования и технологии
Как масштабировать графики в делфи, нужно, чтоб он постоянно строился, а менялся лишь масштаб по времени...
Там вообще-то для графиков есть компонент Tchart.
Похожие вопросы
- В веб-программировании постоянно всё быстро меняется?
- В делфи нужно заменить группу пробелов одним. как считать сделал а изменить как незнаю
- Помогите, нужно построить график y= sin(x) в делфи без использования Tchart. Срочно! Срочно!
- Скажите сколько месяцев нужно изучать Делфи что бы написать программу вывода даты, дня недели и года в окно ?
- Нужно написать программу в делфи....не могу сама никак
- построить программу вывода значения ф-ции y=А*sin(wx) в виде графика, где A=0,5, w=2, x на [0;п] ,на делфи.. . нужен текс
- надо решить задачку через делфи и паскаль)))
- Вопрос по делфи
- языки делфи и си
- Как свое сворачивать приложение на делфи в tree ася 404048645