Spirala logarytmiczna

0

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;
0

Lepiej było by upchać problem w jakiś prosty projekt i zapchać na tutaj na serwer. Bo mi by się nie chciało zapewniać wszystkich zależności jakie są potrzebne aby sprawdzić co jest nie tak. i Jak wyglada bleddny wykres a jak powinien wygladac dobry

0

Wymyśliłeś te deltax i deltay przy osiach, a przy samym rysunku nie jesteś w stanie tego samego wymyślić?
Nie skalujesz obrazu.

1 użytkowników online, w tym zalogowanych: 0, gości: 1