С помощью графической процедуры можно создавать на современном компьютере разнообразные рисунки, схемы и т.д. Количество пикселей на экране зависит от типа графического адаптера. Его определяют по разрешению конкретного компьютера, монитора и настроек.
Сегодня у нас более простой урок - построение графиков функций.
Допустим требуется построить график функции у= х²-7 на отрезке [-5,5]. Кроме кривой, изображающей график этой функции, на экране должны быть высвечены координатные оси Ох и Оу. Расположем начало системы координат Оху в середине экрана (т.е. в точке, определённой парой чисел 160, 100, для экрана по умолчанию). Определимся с количеством точек экрана, соответствующих единице измерения в системе координат Оху - масштабный множитель. Возьмём, например, 10. В этом случае положение точки графика с координатами (х,у) на экране определяется парой значений 160+10*х, 100-10*у.
Напишем программу построения графика:
program parabola;
uses graphabc;
var i:integer;
x,y:real;
begin
line(0,240,620,240);
line(300,0,300,900);
for i:=-500 to 500 do
begin
x:=0.03*i;
y:=x*x-7;
setpixel(round(300+20*x),round(240-20*y),clRed );
textout(10,10,'y=x*x-7');
end;
end.
Понравилось?
ДЗ.Украсим, подправим.
При выполнении этой программы на экране вначале высвечивается горизонтальный и вертикальный отрезки, проходящие через середину экрана. На каждом из них отмечается точка, соответствующая единице в системе координат Оху. Затем в цикле с параметром I выполняется построение графика функции у= х²-7.Порядок можно поменять.
Таким образом, за счёт выбора в качестве приращения аргумента величины, обратной масштабному множителю, а например числа 0,01 можно увеличить приращение аргумента. График может строиться медленее, но избавляемся от просветов между точками.
uses graphabc; var i:integer; x,y:real; begin line (0,240,620,240); line(300,0,300,900); for i:=-5000 to 5000 do begin x:=0.01*i; y:=x*x-50; setpixel(round(300+15*x),round(240-2*y),clBlue); textout(10,10,'y=x*x-50'); end; end.
uses graphabc; var i: integer; x, y: real; begin ClearWindow(clYellow); line (0, 240, 620, 240); line (300, 0, 300, 900); for i:=-5000 to 5000 do begin x:=0.001*i; y:=x*x-7; setpixel(round(300+20*x), round(240-20*y), clTeal); textout(10, 10,'y=x*x-7'); end; end.
program mp; uses graphabc; var i:integer; x,y:real; begin line(0,350,760,350); line(300,0,300,900); for i:=-5000 to 5000 do begin x:=0.01*i; y:=x*x-3; setpixel(round(300+20*x),round(240-20*y),clolive ); textout(20,20,'y=x*x-70'); end; end.
Гипербола uses graphabc; var i: integer; x, y: real; begin ClearWindow(clTeal); line (0, 240, 620, 240); line (300, 0, 300, 900); for i:=-10000 to 10000 do begin x:=0.001*i; y:=x*x*x; setpixel(round(300+20*x), round(240-20*y), clRed); textout(10, 10,'y=x*x-7'); end; end.
program graphic; uses graphabc; var i:integer; x,y:real; begin ClearWindow (clMaroon); line(0,240,620,240); line(300,0,300,900); for i:=-600 to 700 do begin x:=0.02*i; y:=x*x-45; setpixel(round(300+25*x),round(240-3*y),clLime ); textout(10,10,'y=x*x-45'); end; end.
uses graphabc; var xc,yc,rr,x,y,i:integer; r,f,m:real; s:string; begin xc:=windowwidth div 2; yc:=windowheight div 2; line (0, 240, 620, 240); line (300, 0, 300, 900); m:=yc-30; f:=0; while f<2*pi do begin r:=sin(3*f); x:=xc+round(r*m*cos(f))-15; y:=yc-round(r*m*sin(f))+25; setpixel(x,y,clRed); f:=f+0.001; end; end.
uses graphabc; var i: integer; x, y: real; begin ClearWindow(clred); line (0,300, 620, 300); line (300, 0 ,300, 900); for i:=-10000 to 10000 do begin x:=0.003*i; y:=x*x*x; setpixel(round(300+58*x), round(240-58*y), clblack); textout(20, 20,'y=x*x-6'); end; end.
цветок uses graphABC; var a,n,x,y:integer; f:real; begin SetWindowSize(768,512); ClearWindow(clSilver); a:=5;n:=4; f:=0; Line(320,0,320,480); Line(0,240,640,240); while f<15 do begin x:=round(320 + a*Sin(n*f)*Cos(f)*40); y:=round(240-a*Sin(n*f)*Sin(f)*40); SetPixel(x,y,clPurple); f:=f+0.001; end; end.
uses graphabc; var i: integer; x, y: real; begin ClearWindow(clsilver); line (0,300, 620, 300); line (300, 0 ,300, 900); for i:=-7000 to 7000 do begin x:=0.002*i; y:=x*x*x; setpixel(round(300+49*x), round(240-49*y), claqua); textout(20, 20,'y=x*x-9'); end; end.
uses graphabc; var i:integer; x,y:real; begin line (0,240,620,240); line(400,0,400,900); for i:=-10000 to 10000 do begin x:=0.01*i; y:=x*x*x-0; setpixel(round(400+20*x),round(240-2*y),clblack); textout(10,10,'y=x*x*x-0'); end; end.