Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
ПО_ЛР_27_28.docx
Скачиваний:
10
Добавлен:
27.09.2019
Размер:
88.75 Кб
Скачать

Вариант 1

program f;

uses graph;

var gd, gm: integer;

x, y: real;

begin

gd:= detect;

initgraph( gd, gm, ‘c:\ bp’);

SetColor(5);

Line(0, 240, 640, 240);

Line(320, 0, 320, 480);

x:= -20;

While x<=20 do

begin

y:= -Sqr(x);

PutPixel(round( x *5) + 320, round(y*5) +240, 15);

x:=x + 0.01;

end;

end.

 

Вариант 2

program f;

uses graph, crt;

var gd, gm: integer;

x, y, mx, my, m,x1, x2, y1, y2,h: real;

function f(x:real): real;

begin

 f:= Sqr(x);

 end;

clrscr;

Write(‘Введите границы отрезка’);

Read(x1, x2);

y1:=f(x1);

mx:=640 /(x2 –x1);

my:=480 / (y1 – 0);

If mx< my Then m:=mx

else m:= my;

h:= 1/m; x:=x1;

gd:= detect;

initgraph(gd, gm, ‘c:\ bp’);

SetColor (5);

Line(0, 240, 640, 240);

Line(320, 0, 320, 480);

While x<= x2 do

begin

y:= -f(x);

PutPixel(round(x *m) +320, round(y*m) +240, 15);

x:= x+ h;

end;

end.

Для перевода текущих координат точки из декартовой системы координат в систему устройства можно воспользоваться формулами:

nx:=round((x-xmin)/(maxx-minx)*nx_max);

ny:=round((y-ymax)/(maxy-miny)*ny_max);

где: x,y – координаты текущей точки;

xmax, xmin – диапазон изменения x в декартовой системе координат;

ymax, ymin - диапазон изменения y в декартовой системе координат;

nx_max – количество пиксел по ширине экрана, можно получить при помощи функции Getmaxx;

ny_max - количество пиксел по высоте экрана, можно получить при помощи функции Getmaxy;

Их удобно оформить в виде функций. Заданную формулу для графика тоже лучше оформить в виде функции, тогда получится универсальная программа.

Вариант 3

program grafik;

uses graph,crt;

var xmin,xmax,ymin,ymax:real;

x,dx:real;

grDriver: Integer;

grMode: Integer;

ErrCode: Integer;

function nx(x:real):integer;

begin nx:=round((x-xmin)/(xmax-xmin)*getmaxx) end;

function ny(y:real):integer;

begin ny:=round((y-ymax)/(ymax-ymin)*getmaxy) end;

function y(x:real):real;

begin y:=sqr(x) end;

begin

grDriver := Detect;

InitGraph(grDriver, grMode,'u:\win95\bp7\bgi');

ErrCode := GraphResult;

if ErrCode = grOk then

begin

xmax:=5;xmin:=-5;

ymax:=5;ymin:=-5;

dx:=0.1;

setcolor(14);

Line(GetMaxX div 2,0, GetMaxX div 2, GetMaxY);

Line(0,GetMaxY div 2, GetMaxX, GetMaxY div 2);

setcolor(13);

x:=-4;

while x<=4 do

begin line(nx(x),-ny(y(x)),nx(x+dx),-ny(y(x+dx)));

x:=x+dx

end;

Readln;

CloseGraph;

end

else

Writeln('Graphics error:', GraphErrorMsg(ErrCode));

end.

Замечание: Лучше для рисования графика использовать процедуру line, а не putpixel, т.к. график получится без разрывов.

            Рассмотрим построение графика функции, заданной параметрически. В отличие от функции, заданной в явном виде y=f(x), параметр х в этом  случае также является функцией, зависящей от некоторого  значения.

Пример.

Построить график функции (кардиоида)

x = a cos t ( 1+ cost), y = a sin t( 1+cost), a > 0, t  [0, 2 )

Приведем фрагмент программы:

SetColor (5);

Line(0, 240, 640, 240);

Line(320, 0, 320, 480);

t:=0; a:=3;

While t<= 3.1415 do

begin

x:=a*cos(t)*(1+cos(t));

y:= - a sin(t)*(1+cos(t));

PutPixel(x*5 +320, y*5 +240, 15);

x:= x+ 0.01;

end;

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]