oki, ich poste hier mal den haupteil meines codes: (Erklärung der Veriablen weiter unten)
Code:
procedure geradezeichnen(term:string; index: integer; farbe: TColor;
canvas: Tcanvas;stringgrid:TStringgrid;gauge: TGauge);
var i,counter: integer;
wert: extended;
wertalt: extended;
temp:integer;
begin;
canvas.Pen.color := farbe;
StringGrid.Cells[index,0] := term;
counter := 0;
x:=0;
wert := termtoreal(term);
if (von < 0) then temp := von*divi*-1
else temp := von*divi;
//Negativ
for i:= 1 downto (von*divi) do begin;
//Berechnen des Wertes
x:=(i-1)/divi;
wertalt := termtoreal(term);
//Fertig
//Eintragen und zeichnen des Wertes
if nodraw = false then begin;
canvas.MoveTo(ileft+round((i*multi)/divi),itop-round(wert*multi));
canvas.lineTo(ileft+round(((i-1)*multi)/divi),itop-round(wertalt*multi));
end;
//StringGrid.Cells[0,temp - counter +2] := floattostr(i/divi);
StringGrid.Cells[index,temp - counter +2] := floattostr(wert);
//Fertig
wert := wertalt;
gauge.Progress := gauge.Progress+1;
inc(counter);
if pm then application.ProcessMessages;
end;
end;
counter := temp+2;
x:=0;
wertalt := termtoreal(term);
//Positiv
for i:= 0 to bis*divi do begin;
//Berechnen des Wertes
x:=i/divi;
wert := termtoreal(term);
//Fertig
//Eintragen und zeichnen des Wertes
if nodraw = false then begin;
canvas.MoveTo(ileft+round((i*multi)/divi),itop-round(wert*multi));
canvas.lineTo(ileft+round(((i-1)*multi)/divi),itop-round(wertalt*multi));
end;
//StringGrid.Cells[0,counter-1] := floattostr(i/divi);
StringGrid.Cells[index,counter-1] := floattostr(wert);
//Fertig
wertalt := wert;
gauge.Progress := gauge.Progress+1;
inc(counter);
if pm then application.ProcessMessages;
end;
end;
end;
also hier die Erklärungen:
term: der Term, z.b. "2x+4"
index: irrelevant (zum Eintragen in ein Stringgrid)
farbe: Linien Farbe
divi: der Divisor, gibt an, auf wieviele Teile genau gerrechnet werden soll. Ist der divi zum Beispiel 1000 so wird jedes Tausendesl ausgerechnet un gezeichnet.
von: Zahlenbereich von
bis: Zahlenbereich bis
nodraw: soll gezeichnet werden?
ileft: x Koordinaten des Mittelpunkts (0|0)
multi: Zoom, Multi von 2 vergrößert das Bild um das Doppelte
itop: y Koordianten des Mittelpunkts (0|0)
wert: ausgerechneter Wert
wertalt: letzter berechneter Wert (zwecks Linienzeichnung)
counter: irrelevant (zum Eintragen in ein Stringgrid)