AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Quadratische fkt. Zeichnet nicht

Ein Thema von mortality · begonnen am 12. Mär 2008 · letzter Beitrag vom 13. Mär 2008
Antwort Antwort
Seite 1 von 5  1 23     Letzte »    
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
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.540 Beiträge
 
Delphi 11 Alexandria
 
#2

Re: Quadratische fkt. Zeichnet nicht

  Alt 12. Mär 2008, 18:55
Zitat:
Delphi-Quellcode:
procedure TForm1.FormPaint(Sender: TObject);
begin
  ClearBox();
end;
Wenn Du auf die Box zeichnest, wird sie immer wieder übermalt. Das kann ja nix werden
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
Benutzerbild von Jelly
Jelly

Registriert seit: 11. Apr 2003
Ort: Moestroff (Luxemburg)
3.741 Beiträge
 
Delphi 2007 Professional
 
#3

Re: Quadratische fkt. Zeichnet nicht

  Alt 12. Mär 2008, 18:57
Schau dir mal dein OnPaint Event an... Da sollte sofort klar werden, dass das nix wird!
Da rufst du nur ein ClearBox auf.
  Mit Zitat antworten Zitat
mortality

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

Re: Quadratische fkt. Zeichnet nicht

  Alt 12. Mär 2008, 19:19
hätte ihr eine lösung für mich wie ich das am besten realisieren soll...ich bin echt verzweifelt sitze schon lange an deisem algo
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.540 Beiträge
 
Delphi 11 Alexandria
 
#5

Re: Quadratische fkt. Zeichnet nicht

  Alt 12. Mär 2008, 19:20
Delphi-Quellcode:
procedure TForm1.FormPaint(Sender: TObject);
begin
// ClearBox();
end;
Versuch mal so
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
mortality

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

Re: Quadratische fkt. Zeichnet nicht

  Alt 12. Mär 2008, 19:22
das ist ja das problem...wenn ichs weglasse funzt es auch nicht
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.540 Beiträge
 
Delphi 11 Alexandria
 
#7

Re: Quadratische fkt. Zeichnet nicht

  Alt 12. Mär 2008, 19:24
Häng das Projekt mal an.
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
mortality

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

Re: Quadratische fkt. Zeichnet nicht

  Alt 12. Mär 2008, 19:27
hier
Angehängte Dateien
Dateityp: zip qfkt_884.zip (209,4 KB, 6x aufgerufen)
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.540 Beiträge
 
Delphi 11 Alexandria
 
#9

Re: Quadratische fkt. Zeichnet nicht

  Alt 12. Mär 2008, 19:36
Ich habe mal eine private Variable eingefügt.
Delphi-Quellcode:
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.
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
mortality

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

Re: Quadratische fkt. Zeichnet nicht

  Alt 12. Mär 2008, 19:44
danke!!!
nur eine frage hätte ich noch vielleicht....wie schaft man die eintelung in längeneinheiten auf den achsen?
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 5  1 23     Letzte »    


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 20:02 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz