Строю график по пикселям, читая точки из файла. Изменяю координаты для того, чтобы фокус всегда был на графике. При построении верхняя часть кусочной функции прижимается к вершине экрана и изменение границ влияет на другие части, а на эту нет.
Код:
\\функция, график которой строится
function f(x:Real):Real;
begin
if x<(-5.6) then
result:=x;
if (x>=5.6) and (x<0) then
result:=-5.6;
if (x>=0) then
result:=7.9;
end;
\\ запись координат в файл. xb - начало отрезка, xe - конец, xgs - шаг
procedure WriteInFile;
begin
p1;
AssignFile(fi,'c:\graf.dat');
Rewrite(fi);
xg1:=xb;
xgs:=abs(xb-xe)*0.001;
while xg1<=xe do
begin
yg1:=f(xg1);
Writeln(fi,xg1,' ',yg1);
xg1:=xg1+xgs;
end;
CloseFile(fi);
end;
\\построение графика
xg1, yg1 это координаты из процедуры записи
min и max - минимальное и максимальное значение функции
procedure Graf;
begin
p1;
Reset(fi);
while not Eof(fi) do
begin
ReadLn(fi,xg1,yg1);
cx:=(xg1-xb)/(xe-xb)*Form1.Image1.width;
cy:=Form1.Image1.Height-50-((yg1-min)/(max-min)*(Form1.Image1.Height-50)) ;
Form1.Image1.Canvas.Pixels[round(cx),round(cy)]:=1;
end;
CloseFile(fi);
end;