uses crt,graphabc; const N=5;//частота отрисовки const T=400; //уровень отрисовки var i,j:integer; type point=array[1..2] of integer; type ColorType=integer; procedure osi; begin setpenwidth(3); line(400,0,400,800); line(0,400,800,400); line(800,0,0,800); end; function to2DY(x,y,z:integer):integer; begin to2DY:=400-z+trunc(0.4*y); end; function to2DX(x,y,z:integer):integer; begin to2DX:=400+x-trunc(0.4*y); end; procedure setpixel3d(x,y,z:integer); begin setpixel(400+x-trunc(0.4*y),400-z+trunc(0.4*y),clBlack); end; procedure line3d(x,y,z,x1,y1,z1:integer); begin line(to2DX(x,y,z),to2Dy(x,y,z),to2DX(x1,y1,z1),to2Dy(x1,y1,z1)) end; procedure lineto3d(x1,y1,z1:integer); begin lineto(to2DX(x1,y1,z1),to2Dy(x1,y1,z1)) end; procedure moveto3d(x1,y1,z1:integer); begin moveto(to2DX(x1,y1,z1),to2Dy(x1,y1,z1)) end; //////////////////////////////////////////////////////// function f(x,y:real):real; var a:integer; begin try f:=(x*x-y*y)/1000; //сама функция двух аргументов except f:=1; end; end; /////////////////////////////////////// procedure metka(x1,y1,z1:integer); var color1:integer; begin color1:=pencolor(); SetBrushColor(clgreen); SetPencolor(clgreen); SetBrushStyle(bsSolid); circle(to2DX(x1,y1,z1),to2Dy(x1,y1,z1),2); SetBrushStyle(bsClear); SetpenColor(color1); end; procedure draw(F: function(x,y:real):real; color:colortype); begin setpenwidth(1); setpencolor(color); for j:=-T to T do begin moveto3d(j,-T,trunc(f(j,-T))); for i:=-T to T do begin if (i mod N=0) and (j mod N=0) then lineto3d(j,i,trunc(f(j,i))); if abs(f(j,i))<0.001 then metka(j,i,trunc(f(j,i))); end; end; for i:=-T to T do begin moveto3d(-T,i,trunc(f(-T,i))); for j:=-T to T do begin if (i mod N=0) and (j mod N=0) then lineto3d(j,i,trunc(f(j,i))); if abs(f(j,i))<0.001 then metka(j,i,trunc(f(j,i))); end; end; end; begin setwindowheight(800); setwindowwidth(800); osi; draw(f,rgb(255,0,0)); end.