Einzelnen Beitrag anzeigen

mortality

Registriert seit: 12. Mär 2008
30 Beiträge
 
#1

Quadratische fkt. Zeichnet nicht

  Alt 12. Mär 2008, 18:50
hallo leute,
ich hab kein plan wieso die zeichnung bei mir net funzt. hab schon mit vielen algos probiert aber dieser sollte funktionieren...aber..
Delphi-Quellcode:
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.
danke im vorraus!!
  Mit Zitat antworten Zitat