unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, ExtCtrls, StdCtrls;
type
TForm1 =
class(TForm)
ed_a: TEdit;
ed_b: TEdit;
ed_c: TEdit;
edbereich: TEdit;
edscalex: TEdit;
edscaley: TEdit;
btsolve: TButton;
btreset: TButton;
functionbox: TPaintBox;
procedure btSolveClick(Sender: TObject);
procedure ClearBox();
procedure btResetClick(Sender: TObject);
procedure FormCreate(Sender: TObject);
procedure functionboxPaint(Sender: TObject);
private
{ Private-Deklarationen }
FHasFunction: Boolean;
public
{ Public-Deklarationen }
end;
var
Form1: TForm1;
implementation
{$R *.DFM}
procedure TForm1.btSolveClick(Sender: TObject);
var i,a,b,c,bereich,goright,goup: Integer;
y1,y2,scalex,scaley: Real;
begin
bereich:= Round(StrToInt(edbereich.Text)/2);
//Breite eines Parabelastes
scalex:= StrToFloat(edscalex.Text);
//Zoomfaktor für x-Achse(z.B. wenn man Breite halbieren will ScaleX:= 0,5)
scaley:= StrToFloat(edscaley.Text);
//Zoomfaktor für y-Achse
goright:= Round(FunctionBox.Width/2);
//GoRight schiebt Fkt nachrechts um sie in die Mitte zu bringen
goup:= Round(FunctionBox.Height/2);
//GoUp schiebt Fkt nach oben umsie in die Mitte zu bringen
ClearBox;
FHasFunction := true;
For i:= -(bereich)
to (bereich-1)
do
begin
a:= StrToInt(ed_a.Text);
b:= StrToInt(ed_b.Text);
c:= StrToInt(ed_c.Text);
y1:= (a*(i*i)+b*i+c);
//Funktion für x alsAusgangspunkt für die Linie
y2:= (a*((i+1)*(i+1))+b*(i+1)+c);
//Funktion für dennachfolgenden Wert von x für Endpunkt der Linie
with FunctionBox
do
begin
Canvas.Pen.Color:= clBlack;
Canvas.MoveTo(Round((i)*scalex + goright), Height-Round(y1*scaley) -goup);
//MoveTo läst denCanvaszeiger zum Ausgangspunkt gehen
//*ScaleY skalliert die Parbel(kann man als einfachen Zoom verstehen)
//z.B.: Verdoppeln entspricht2; Halbieren entspricht 0,5
Canvas.LineTo(Round((i+1)*scalex + goright), Height-Round(y2*scaley) -goup);
//LineTo ziechnet eine Linievon Ausgangspunkt zu Endpunkt
//also von (x1,y1) zu (x2,y2)wobei x1=i, x2=(i+1), y1,y2 wurden vorher berechnet
//So wird die ganze Funktion im Bereich durchgerechnet und von jedem Punktzum nächsten eine Linie gezeichnet
end;
end;
end;
procedure TForm1.ClearBox();
//Prozedur, die ein simples Koordinatensystemzeichnet
begin
with FunctionBox
do
begin
Canvas.Pen.Color:= clGray;
Canvas.Brush.Color:= clWhite;
Canvas.Rectangle(0,0,Width,Height);
//zeichnet Rahmen
Canvas.MoveTo(0,round(Height/2));
Canvas.LineTo(Width,round(Height/2));
//zeichnet x-Achse
Canvas.MoveTo(round(Width/2),0);
Canvas.LineTo(round(Width/2),Width);
//zeichnet y-Achse
end;
end;
procedure TForm1.FormCreate(Sender: TObject);
begin
FHasFunction := false;
end;
procedure TForm1.functionboxPaint(Sender: TObject);
begin
if FHasFunction
then
btSolveClick(self)
else
ClearBox;
end;
procedure TForm1.btResetClick(Sender: TObject);
begin
FHasFunction := false;
invalidate;
end;
end.