[Delphi] Wykres funkcji kwadratowej


(Nkamil1555) #1

Witam,

Robię właśnie program wyliczający deltę, miejsca zerowe funkcji kwadratowej, wyświetla on wynik w Memo, i zapisuje go do pliku.

Chce jeszcze zrobić aby z podanych danych generował się wykres funkcji, ale nie pamiętam jak to powinno być.

Robiliśmy coś takiego na jednej lekcji w tamtym roku, ale jedyne co pamiętam to to że chyba ten wykres nie był linią ciągłą tylko zbiorem punktów, ale mniejsza z tym.

Mógł by mi ktoś pomóc to zrobić???

Z góry dzięki.


(Naatuch) #2

może pomoże:

CODE

procedure TForm1.ComboBox1Change(Sender: TObject);

var i: Integer;

begin

Image1.Canvas.Pen.Color := clBlack;

// rysowanie osi poziomej

Image1.Canvas.MoveTo(0,Image1.Height div 2);

Image1.Canvas.LineTo(Image1.Width,Image1.Height div 2);


// rysowanie osi pionowej

Image1.Canvas.MoveTo(Image1.Width div 2,0);

Image1.Canvas.LineTo(Image1.Width div 2,Image1.Height);


Image1.Canvas.Pen.Color := clRed;

Image1.Canvas.MoveTo(0,Image1.Height div 2);

for i := 0 to Image1.Width do

begin

 // rysowanie sinusa

 if (ComboBox1.ItemIndex = 0) then

 Image1.Canvas.LineTo(i, (Image1.Height div 2) + round( 100*sin(i*2*pi/Image1.Width) ) );


 // rysowanie cosinus

      if (ComboBox1.ItemIndex = 1) then

 Image1.Canvas.LineTo(i, (Image1.Height div 2) + round( 100*cos(i*2*pi/Image1.Width) ) );


 // rysowanie f. kwadrayowej

 if (ComboBox1.ItemIndex = 2) then

 Image1.Canvas.LineTo(i, (Image1.Height div 2) + round( 100*sqrt(i*2*pi/Image1.Width) ) );


end;

http://nvision.pl/forum/index.php?showtopic=19661


(Nkamil1555) #3

na stronie skąd wzięty jest ten kod napisane jest że f.kwadratowa nie wychodzi..

btw. testowałem już go wcześniej dlatego napisałem wątek na forum


(Naatuch) #4

no to popraw, i zastosuj się do porad tam zawartych i wyjdzie,

przecież gotowca nie dostaniesz trochę inwencji :stuck_out_tongue: :smiley:


(Nkamil1555) #5

Jednak poprosił bym kogoś z wiedzą o Delphi o jakieś konkretne podpowiedzi!


([alex]) #6

Z synusem czy kosinusem jest bardzo prosto ponieważ wiadomo że jego zakres jest od -1 do 1 zaś dziedzinę można wybrać dowolnie w przykładzie powyżej jest to od 0 do 2*Pi.

Z funkcją kwadratową nie jest to takie proste ale przy ustaleniu min i max dla każdej osi - nie ma problemu.

var W,H,I,V:Integer;Hmin=-7;Hmax=7;Wmin=-3;Wmax=4;A=1;B=-1;C=-6;scale(Bmin,Bmax:Integer;Amin,Amax,A:Double):Integer;begin:=Round((Bmax*(A-Amin)+Bmin*(Amax-A))/(Amax-Amin));end;unscale(Bmin,Bmax:Double;Amin,Amax,A:Integer):Double;begin:=(Bmax*(A-Amin)+Bmin*(Amax-A))/(Amax-Amin);end;fun(X:Double):Double;begin:=(A*X+B)*X+C;end;begin:=Image1.Width;H:=Image1.Height;with Image1.Canvas dobegin.Color:=clBlack;V:=scale(H,0,Hmin,Hmax,0);MoveTo(0,V);LineTo(W,V);V:=scale(0,W,Wmin,Wmax,0);MoveTo(V,0);LineTo(V,H);Pen.Color:=clRed;