Mam problem z narysowaniem spirali logarytmicznej, nie umieszcza wykresu na środku i jak dochodzi do osi Y odbija i wychodzą "banany", oto kod programu
procedure TForm1.RysujOsie(x_lewy, x_prawy, y_gora, y_dol: real);
var
dlug_x, dlug_y: integer;
begin
//długość po x lewo-prawo
dlug_x:=Round(Abs(x_lewy-x_prawy));
//długość po y góra-dół
dlug_y:=Round(Abs(y_gora-y_dol));
//współczynnik dzielenia zakres rysowania na x przez cały rozmiar pola
deltax:=dlug_x/Rysunek.ClientWidth;
//współczynnik dzielenia zakres rysowania na y przez cały rozmiar pola
deltay:=dlug_y/Rysunek.ClientHeight;
//wyznacz środek wykresu
zero_y:=Round((0-y_dol)/deltay);
zero_x:=Round((0-x_lewy)/deltax);
//kolor osi
Rysunek.Canvas.Pen.Color:=clBlack;
//os x
Rysunek.Canvas.MoveTo(1,Rysunek.ClientHeight-zero_y-1);
Rysunek.Canvas.LineTo(Rysunek.ClientWidth-1, Rysunek.ClientHeight-zero_y-1);
//os y
Rysunek.Canvas.MoveTo(zero_x, Rysunek.ClientHeight-1);
Rysunek.Canvas.LineTo(zero_x,1);
end;
Po kliknięciu na przycisk:
x1:=StrToFloat(LewyX.Text);
x2:=StrToFloat(PrawyX.Text);
y1:=StrToFloat(GoraY.Text);
y2:=StrToFloat(DolY.Text);
RysujOsie(x1,x2,y1,y2);
q:=0.1;
fi:=0;
r:=exp(q*fi);
x:=r*cos(fi);
y:=r*sin(fi);
Rysunek.Canvas.MoveTo(zero_x+Trunc(Abs(x1+x*20)),zero_y-Trunc(Abs(y1-y*20)));
for fi:=0 to 1080 do
begin
r:=exp(q*fi*pi/180);
x:=r*cos(fi*pi/180);
y:=r*sin(fi*pi/180);
Rysunek.Canvas.LineTo(zero_x+Trunc(Abs(x1+x*20)),zero_y-Trunc(Abs(y1-y*20)));
end;
end;