Строю график по пикселям, читая точки из файла. Изменяю координаты для того, чтобы фокус всегда был на графике. При построении верхняя часть кусочной функции прижимается к вершине экрана и изменение границ влияет на другие части, а на эту нет.
Код:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 | \\функция, график которой строится
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 ;
|