{$N+}
{$E+}
program ex;
uses crt, graph;
type
tcurve = procedure(t: double; var x, y: double);
const
a = 3;
b = 9;
L: double = 4;
scale = 12; { mashtab izobrageniya }
step = 0.005;
{
procedura dlya otrisovki tochki krivoy,
parametricheskoe predstavlenie kotoroy zadano funkchiey F
pri znachenii parametra = T
}
procedure set_point(t: double; f: tcurve);
var
x, y: double;
begin
f(t, x, y);
putpixel((getmaxx div 2) + trunc(scale * x),
(getmaxy div 2) - trunc(scale * y), white);
end;
{
otrisovka krivoy so znacheniem parametra,
legavshim v intervale [start, finish] i shagom izmeneniya parametra step
}
procedure draw_curve(start, finish, step: double; f: tcurve);
var
t: double;
begin
{ risovanie osi koordinat }
setcolor(green);
line(0, getmaxy div 2, getmaxx, getmaxy div 2);
line(getmaxx div 2, 0, getmaxx div 2, getmaxy);
t := start; { nachalo intervala }
{ poka ne vishli za granichu intervala }
while t <= finish do
begin
set_point(t, f);
t := t + step; { narashivaem parametr }
end;
end;
procedure evolventa(t: double; var x, y: double); far;
begin
x := a * (sin(t) - t);
y := a * (cos(t) - 1);
end;
var
mode, driver: integer;
begin
driver := detect;
initgraph(mode, driver, 'D:\program\bp\bgi');
{ draw_curve(nachalo intervala, konech intervala, shag, my_curve); }
draw_curve(-10, 10, step, evolventa);
readln;
closegraph;
end.