Einzelnen Beitrag anzeigen

Fuchspower

Registriert seit: 17. Okt 2008
8 Beiträge
 
#1

Funktion wird nicht gezeichnet

  Alt 28. Mär 2009, 23:05
Meine Aufgabe ist es ein Programm zu schreiben, das eine Funktion fünften Grades mit änderbaren Koordinaten zeichnet.

Die relevanten Quelltexte lauten wie folgt:
Delphi-Quellcode:
var
  Form1: TForm1;
 x1, x2, x3, x4, x5, x, y: real;
 x0, y0, xEins, yEins, xB, yB: integer;

procedure TForm1.Button1Click(Sender: TObject);
begin
if edit1.text=''
then x1:=0
else x1:=strtofloat(edit1.text);

if edit2.text=''
then x1:=0
else x2:=strtofloat(edit2.text);

if edit3.text=''
then x3:=0
else x3:=strtofloat(edit3.text);

if edit4.text=''
then x4:=0
else x4:=strtofloat(edit4.text);

if edit5.text=''
then x5:=0
else x5:=strtofloat(edit5.text);

with image1.canvas do
begin
pen.color:=clwhite;
canvas.rectangle(-1,-1,2*x0+1,2*y0+1);
pen.color:=clblack;
moveto(x0,0); lineto(x0,2*y0);
moveto(0,y0); lineto(2*x0,y0);
moveto(x0+xeins,y0-5); lineto(x0+xEins,y0+6);
moveto(x0-5,y0-yEins); lineto(x0+6,y0-yEins);
xB:=0;
timer1.enabled:=true;
end;
end;

procedure TForm1.Timer1Timer(Sender: TObject);
begin
if xB <2*x0 then timer1.enabled:=false; exit;
x:=(xb-x0)/(xEins-x0);
y:=x1*x*x*x*x+x2*x*x*x+x3*x*x+x4*x+x5;
yB:= Round(y*(YEins-y0)+y0);
if xB=0
then Image1.canvas.MoveTo(xB,yB)
else Image1.canvas.lineto(xB,yB);
xB:=xB+1;
end;
Sobald ich fixe Werte in die jeweiligen Editfelder eingebe und den Graphen zeichnen lassen möchte, ist lediglich für einen minimalen Zeitraum ein Strich an der Funktion x=1 zu sehen. Die procedure des Timers habe ich (angepasst) aus meinem Schulbuch abgeschrieben, ich denke, dass da der Fehler liegt.

Anmerkung: Ich weiß, dass das Programm abstürzt, wenn keine Zahlen eingegeben werden, aber darum kümmere ich mich, wenn der Rest funktioniert.
  Mit Zitat antworten Zitat