Написал програмку для рисования графика A(EXP в степени (t/2)+EXP в степени (-t/2)), с маштобированием графика, смещением и поворотом но он не рисуется компилируется но когда нажимаешь построить он не строит
Код:
]procedure TForm1.DrawFunction;
var
xo,yo,i:integer;
t,r,al,yr,yold,xr,xold:real;
begin
ListBox1.Clear;
Form1.Canvas.Rectangle(15,15,Graph.ClientWidth+17,Graph.ClientHeight+17);
A:=StrToIntDef(Edit1.Text,60);
xo:=Graph.ClientWidth div 2;
yo:=Graph.ClientHeight div 2;
t:=0.001;
Graph.Canvas.MoveTo(xo+round((x0)*m),
yo-round((y0)*m));
Graph.Canvas.Pen.Color:=clBlack;
Graph.Canvas.Pen.Width:=2;
xold:=x0;
yold:=y0;
ymin:=yold;
ymax:=yold;
xmax:=xold;
xmin:=xold;
while(t<2*Pi+0.001) do
begin
xr:=x0;
yr:=y0;
Graph.Canvas.LineTo(xo+round(xr*m),yo-round(yr*m));
t:=t+0.001;
if (xr*xold)<0 then
begin
ListBox1.AddItem('x=0 y='+FloatToStrF(yr, ffFixed, 6, 3)+' t='+FloatToStrF(t, ffFixed, 6, 3),Form1);
end;
if (yr*yold)<0 then
begin
ListBox1.AddItem('y=0 x='+FloatToStrF(xr, ffFixed, 6, 3)+' t='+FloatToStrF(t, ffFixed, 6, 3),Form1);
end;
if xr>xmax then xmax:=xr;
if yr>ymax then ymax:=yr;
if xr<xmin then xmin:=xr;
if yr<ymin then ymin:=yr;
xold:=xr;
yold:=yr;
end;
DrawSetkaText;
end;
procedure TForm1.Button1Click(Sender: TObject);
begin
DrawFunction;
end;
procedure TForm1.FormKey1Press(Sender: TObject; var Key1: Char);
var r:real;
begin
if(Key1='+')or(Key1='-')or(Key1='<')or(Key1='>')or(Key1='q')or
(Key1='w')or(Key1='a')or(Key1='s')or(Key1='d') then
begin
if Key1 = '+' then
m:=m+0.01*StrToIntDef(Edit6.Text,10);
if Key1 = '-' then
if (m-0.01*StrToIntDef(Edit6.Text,10)>0) then
m:=m-0.01*StrToIntDef(Edit6.Text,10);
if Key1 = 'q' then
Close();
if Key1 = 'a' then x0:=x0-StrToIntDef(edit8.Text,1);
if Key1 = 'd' then x0:=x0+StrToIntDef(edit8.Text,1);
if Key1 = 's' then y0:=y0-StrToIntDef(edit8.Text,1);
if Key1 = 'w' then y0:=y0+StrToIntDef(edit8.Text,1);
if Key1 = '<' then fi:=fi+StrToIntDef(edit9.Text,1)*Pi/180;
if Key1 = '>' then fi:=fi-StrToIntDef(edit9.Text,1)*Pi/180;
DrawFunction;
end;
end;
procedure TForm1.Button2Click(Sender: TObject);
begin
ShowMessage(help);
end;
procedure TForm1.FormCreate(Sender: TObject);
begin
Form1.KeyPreview:=true;
Form1.DoubleBuffered:=true;
m:=1;
x0:=0;
y0:=0;
fi:=0;
help:='+ увеличить масштаб'+#13+#10+
'- увеличить масштаб'+#13+#10+
'< повернуть по часовой стрелке'+#13+#10+
'> повернуть против часовой стрелки'+#13+#10+
'w сдвинуть вврех'+#13+#10+
's сдвинуть вниз'+#13+#10+
'a сдвинуть влево'+#13+#10+
'd сдвинуть вправо'+#13+#10+
'q выход';
end;
procedure TForm1.FormPaint(Sender: TObject);
begin
Form1.Canvas.Brush.Color:=clWhite;
Form1.Canvas.Rectangle(15,15,Graph.ClientWidth+17,Graph.ClientHeight+17);
DrawFunction;
end;
function TForm1.x(t:real):real;
begin
x:=A*(exp(t/2)+exp(-t/2));
end;
procedure TForm1.DrawSetkaText;
var i,delta,n,xo,yo:integer;
begin
Graph.Canvas.Font.Size:=10;
xo:=Graph.Width div 2;
yo:=Graph.Height div 2;
delta:=StrToIntDef(edit2.Text,100);
if delta<20 then
begin
ShowMessage('Минимальный размер сетки равен 20');
delta:=50;
edit2.Text:='50';
end;
n:=round(xo/delta)+1;
Graph.Canvas.Pen.Width:=1;
Graph.Canvas.Pen.Color:=clgreen;
for i:=-n to n do
begin
Graph.Canvas.MoveTo(xo+delta*i,Graph.Height);
Graph.Canvas.LineTo(xo+delta*i,0);
Graph.Canvas.MoveTo(Graph.Width,yo+delta*i);
Graph.Canvas.LineTo(0,yo+delta*i);
Graph.Canvas.TextOut(xo+delta*i,Graph.Height div 2,IntToStr(round(delta*i/m)));
Graph.Canvas.TextOut(Graph.Width div 2,yo+delta*i,IntToStr(round(-delta*i/m)));
end;
end;
procedure TForm1.FormResize(Sender: TObject);
begin
DrawFunction;
end;
end.