This repository has been archived on 2024-12-25. You can view files and clone it, but cannot push or open issues or pull requests.
2023-06-20 21:52:24 +03:00

65 lines
1.3 KiB
ObjectPascal

// Пример из пакета KuMir/PMir
// Публикуется практически без изменений
// Дорог как память :)
Uses GraphABC;
var Xmin,Xmax,Xstep: real;
Ymin,Ymax,Ystep,asp: real;
dx: integer;
function f(x,y:real): integer;
var r: real;
begin
r := x*x+y*y+1;
f := round(5*asp*(cos(r)/r+0.1))
end;
procedure gr(N : integer);
var X,Y: real;
i,j,k,Z0,dy: integer;
pred: array [1..100] of integer;
jj,maxX,maxY: integer;
begin
Xmin := -4;
Xmax := 4;
Ymin := -3;
Ymax := 3;
maxX := 600;
maxY := 400;
Xstep := dx*(Xmax-Xmin)/maxX;
X := Xmin;
Ystep := (Ymax-Ymin)/N;
Y := Ymin;
dy := maxY div N div 2;
asp := maxY/8;
for i := 1 to N do
begin
pred[i] := maxY-i*dy-f(X,Y);
Y := Y + Ystep
end;
for jj := 1 to maxX div dx do
begin
j := jj*dx;
X := X + Xstep;
Y := Ymin; Z0 := maxY;
for i := 1 to N do
begin
k := maxY-i*dy-f(X,Y);
if k<Z0 then
begin
Line(j-dx,pred[i],j,k);
Z0 := k
end;
pred[i] := Z0;
Y := Y+Ystep
end;
end;
end;
begin
SetWindowCaption('График функции двух переменных');
SetWindowSize(600,400);
dx := 2; { разрешение по оси X }
gr(100); { количество линий по Y <= MaxN }
end.