1
unit function_main;
2
3
interface
4
5
uses
6 Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
7 Grids, StdCtrls, ExtCtrls, ToolWin, ComCtrls;
8
9
type
10 TForm1 =
class(TForm)
11 FunctionBox: TPaintBox;
12 btSolve: TButton;
13 ed_a: TEdit;
14 ed_b: TEdit;
15 ed_c: TEdit;
16 Label1: TLabel;
// ---
17 Label2: TLabel;
// Labels werden nicht unbedingt benötigt
18 Label3: TLabel;
// ---
19 edbereich: TEdit;
20 edscalex: TEdit;
21 btReset: TButton;
22 edscaley: TEdit;
23
procedure btSolveClick(Sender: TObject);
24
procedure FormPaint(Sender: TObject);
25
procedure ClearBox();
26
procedure btResetClick(Sender: TObject);
27
private
28
{ Private-Deklarationen }
29
public
30
{ Public-Deklarationen }
31
end;
32
33
var
34 Form1: TForm1;
35
36
implementation
37
38
{$R *.DFM}
39
40
procedure TForm1.btSolveClick(Sender: TObject);
41
var i,a,b,c,bereich,goright,goup: Integer;
42 y1,y2,scalex,scaley: Real;
43
begin
44 bereich:= Round(StrToInt(edbereich.Text)/2);
//Breite eines Parabelastes
45 scalex:= StrToFloat(edscalex.Text);
//Zoomfaktor für x-Achse(z.B. wenn man Breite halbieren will ScaleX:= 0,5)
46 scaley:= StrToFloat(edscaley.Text);
//Zoomfaktor für y-Achse
47
48 goright:= Round(FunctionBox.Width/2);
//GoRight schiebt Fkt nachrechts um sie in die Mitte zu bringen
49 goup:= Round(FunctionBox.Height/2);
//GoUp schiebt Fkt nach oben umsie in die Mitte zu bringen
50
51
For i:= -(bereich)
to (bereich-1)
do
52
begin
53 a:= StrToInt(ed_a.Text);
54 b:= StrToInt(ed_b.Text);
55 c:= StrToInt(ed_c.Text);
56 y1:= (a*(i*i)+b*i+c);
//Funktion für x alsAusgangspunkt für die Linie
57 y2:= (a*((i+1)*(i+1))+b*(i+1)+c);
//Funktion für dennachfolgenden Wert von x für Endpunkt der Linie
58
59
with FunctionBox
do
60
begin
61 Canvas.Pen.Color:= clBlack;
62 Canvas.MoveTo(Round((i)*scalex + goright), Height-Round(y1*scaley) -goup);
63
//MoveTo läst denCanvaszeiger zum Ausgangspunkt gehen
64
//*ScaleY skalliert die Parbel(kann man als einfachen Zoom verstehen)
65
//z.B.: Verdoppeln entspricht2; Halbieren entspricht 0,5
66 Canvas.LineTo(Round((i+1)*scalex + goright), Height-Round(y2*scaley) -goup);
67
//LineTo ziechnet eine Linievon Ausgangspunkt zu Endpunkt
68
//also von (x1,y1) zu (x2,y2)wobei x1=i, x2=(i+1), y1,y2 wurden vorher berechnet
69
//So wird die ganze Funktion im Bereich durchgerechnet und von jedem Punktzum nächsten eine Linie gezeichnet
70
end;
71
end;
72
end;
73
74
procedure TForm1.ClearBox();
//Prozedur, die ein simples Koordinatensystemzeichnet
75
begin
76
with FunctionBox
do
77
begin
78 Canvas.Pen.Color:= clGray;
79 Canvas.Brush.Color:= clWhite;
80 Canvas.Rectangle(0,0,Width,Height);
//zeichnet Rahmen
81 Canvas.MoveTo(0,round(Height/2));
82 Canvas.LineTo(Width,round(Height/2));
//zeichnet x-Achse
83 Canvas.MoveTo(round(Width/2),0);
84 Canvas.LineTo(round(Width/2),Width);
//zeichnet y-Achse
85
end;
86
end;
87
88
procedure TForm1.FormPaint(Sender: TObject);
89
begin
90 ClearBox();
91
end;
92
93
procedure TForm1.btResetClick(Sender: TObject);
94
begin
95 ClearBox();
96
end;
97
98
end.