Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Software-Projekte der Mitglieder (https://www.delphipraxis.net/26-software-projekte-der-mitglieder/)
-   -   Ein Graphenzeichner (https://www.delphipraxis.net/36986-ein-graphenzeichner.html)

Birzenbae 29. Dez 2004 02:54


Ein Graphenzeichner
 
Liste der Anhänge anzeigen (Anzahl: 1)
Wie ihr aus dem Titel unschwer erkennen könnt handelt es sich hierbei um ein Programm mit dem man Graphen zeichnen lassen kann. Die größe der Einheiten lassen sich für beide Achsen begrenzt einstellen. Bisher kann man die Graphen von Geradenfunktionen(<- weiss nicht genau ob der Name dieser Funktion korrekt ist, bitte um Antwort), Potenzfunktionen und Wurzelfunktionen zeichnen.
Da es sich hierbei um mein Schulprojekt handelt bitte ich um ganz viel Feedback was man besser machen könnte und ob ihr euch gut in den Quelltext einlesen konntet, da ich noch keine Kommentare reingeschrieben hab.

EDIT: Neuste Version HIER

Luckie 29. Dez 2004 03:36

Re: Ein Graphenzeichner
 
Wie man so was auch wunderbar objektorientiert lösen kann, kannst du dir mal an meinem Schiefen Wurf angucken.

Desweiteren finde ich das mit den zwei Fenstern etwas unhandlich. Und warum kann man das Fenster mit dem Grafen nicht maximieren? Eie Zoomfunktion wäre auch nicht schlecht.

In den Code habe ich nur kurz reingeguckt aber das:
Delphi-Quellcode:
    if Combobox1.text = 'Geradenfunktion' then
    begin
      //...
    end
    else if Combobox1.Text = 'Potenzfunktion' then
    begin
      //...
    end
    else if Combobox1.Text = 'Wurzelfunktion' then
    begin
      //...
    end;
Läßt sich mit einer case-Anweisung eleganter lösen:
Delphi-Quellcode:
case ComboBox1.ItemIndex of
  0:;
  1:;
  2:;
end;
Und mir ist noch aufgefallen, dass der Code sehr stark an die GUI gebunden ist. Willst du jetzt eine andere Oberfläche aufsetzten, bedeutet das ziemlich viel Arbeit. Trenne Code von der GUI besser und du hast es einfacher bei Änderungen. Dann bietet sich auch gleich an das ganze OOP gerecht zu machen.
Ich habe bei meinem Programm eine extra Klasse nur für das Koordinatensystem. Da könnte ich einen beliebeigen Grafen drauf zeichen, ohne den Code für das Koordinatensystem zu ändern, anzupassen oder gar neu schreiben zu müssen.

Wenn ich das Fenster mit dem Grafen minimier und wieder maximiere, ist er weg. Wie man auch das Problem löst, kannst du dir auch an meinem Programm angucken.

Wäre auch schön, wenn man nicht noch mal den Grafen zeichnen müsste, wenn man den Maßstab ändert.

Und du solltest den Quellcode besser formatieren. Das:
Delphi-Quellcode:
procedure TForm2.Button1Click(Sender: TObject);
var c,d,i,n,y:Integer;
    a,b,m:real;
    einheity,einheitx:integer;
begin
einheity:=strtoint(Combobox2.Text);
einheitx:=strtoint(Combobox3.Text);
with Form1.Canvas do begin

if Combobox1.text='Geradenfunktion' then begin
m:=strtofloat(Edit1.Text);
n:=strtoint(Edit3.Text);
moveto(400,300-n);
for i:=0 to 401 do begin
y:=geraden(m,i, einheitx,einheity,n);
lineto(400+i, 300-y);
moveto(400+i, 300-y);
end;
moveto(400,300-n);
for i:=0 to 401 do begin
y:=geraden(m,i, einheitx,einheity,n);
lineto(400-i, 300-(2*n*einheity)+y);
moveto(400-i, 300-(2*n*einheity)+y);
end;

end else if Combobox1.Text='Potenzfunktion' then begin
a:=strtofloat(Edit8.text);
b:=strtofloat(Edit10.text);
d:=strtoint(Edit11.Text);
c:=strtoint(Edit12.Text);
moveto(400,300-d);
for i:=0 to 401 do begin
y:=Potenz(a,b, einheitx,einheity,i,d,c);
lineto(400+i, 300-y);
moveto(400+i, 300-y);
end;
moveto(400,300);
for i:=0 to 401 do begin
y:=Potenz(a,b, einheitx,einheity,-1*i,d,c);
lineto(400-i, 300-y);
moveto(400-i, 300-y);
end;

end else if Combobox1.Text='Wurzelfunktion' then begin
a:=strtofloat(Edit4.text);
b:=strtofloat(Edit6.text);
c:=strtoint(Edit7.Text);
moveto(400+(round(b)*einheitx),300-(c*einheity));
for i:=1 to 401 do begin
if (i div einheitx)>=b then begin
y:=Wurzel(a,i,b,einheitx,einheity,c);
lineto(400+i, 300-y);
moveto(400+i, 300-y);
end;
end;
end;

end;

end;
ist so gut wie nicht wartbar. Wenn du da einen Fehler suchst oder wenn du da was erweitern willst, wünsche ich viel Spass. Das hingegen:
Delphi-Quellcode:
procedure TForm2.Button1Click(Sender: TObject);
var
  c, d, i, n, y: Integer;
  a, b, m     : real;
  einheity, einheitx: integer;
begin
  einheity := strtoint(Combobox2.Text);
  einheitx := strtoint(Combobox3.Text);
  with Form1.Canvas do
  begin

    if Combobox1.text = 'Geradenfunktion' then
    begin
      m := strtofloat(Edit1.Text);
      n := strtoint(Edit3.Text);
      moveto(400, 300 - n);
      for i := 0 to 401 do
      begin
        y := geraden(m, i, einheitx, einheity, n);
        lineto(400 + i, 300 - y);
        moveto(400 + i, 300 - y);
      end;
      moveto(400, 300 - n);
      for i := 0 to 401 do
      begin
        y := geraden(m, i, einheitx, einheity, n);
        lineto(400 - i, 300 - (2 * n * einheity) + y);
        moveto(400 - i, 300 - (2 * n * einheity) + y);
      end;

    end
    else if Combobox1.Text = 'Potenzfunktion' then
    begin
      a := strtofloat(Edit8.text);
      b := strtofloat(Edit10.text);
      d := strtoint(Edit11.Text);
      c := strtoint(Edit12.Text);
      moveto(400, 300 - d);
      for i := 0 to 401 do
      begin
        y := Potenz(a, b, einheitx, einheity, i, d, c);
        lineto(400 + i, 300 - y);
        moveto(400 + i, 300 - y);
      end;
      moveto(400, 300);
      for i := 0 to 401 do
      begin
        y := Potenz(a, b, einheitx, einheity, -1 * i, d, c);
        lineto(400 - i, 300 - y);
        moveto(400 - i, 300 - y);
      end;

    end
    else if Combobox1.Text = 'Wurzelfunktion' then
    begin
      a := strtofloat(Edit4.text);
      b := strtofloat(Edit6.text);
      c := strtoint(Edit7.Text);
      moveto(400 + (round(b) * einheitx), 300 - (c * einheity));
      for i := 1 to 401 do
      begin
        if (i div einheitx) >= b then
        begin
          y := Wurzel(a, i, b, einheitx, einheity, c);
          lineto(400 + i, 300 - y);
          moveto(400 + i, 300 - y);
        end;
      end;
    end;
  end;
end;
kann man lesen.

Birzenbae 29. Dez 2004 04:07

Re: Ein Graphenzeichner
 
erstmal THX fürs Feedback:
1. Ja, ich werd das demnächst auch noch ändern.
2. Das Fenster soll man nicht vergrößern, da ich alle zeichnung an der Pixelzahl fest gemacht hab.
3. Zoomfunktion mal sehen, aber die ist ja auch schon teilweise dadurch entahlten, dass man die Einheiten vergrößern kann.
4. case-Anweisung hätte ich ja selbst darauf kommen müssen hatten wir als letztes durchgenommen :wall:
5. vll mach ichs ja noch oop, will aber die referendarin nich schocken, weil ich dank der DP schon mehr kann als die andern, abgesehen
davon, dass ich oop nicht kann, müsste ich mir dann mal ansehen.
6. das mit dem verschwinden der graphen werd ich auch noch bearbeiten
7. das die graphen beim verändern des Koordinatensystems gelöscht werden hab ich deswegen gemacht, dass man da nicht 2 Graphen aus
unterschiedlichen Systemen verwechselt, aber wenn es besser wäre, dass die bleiben mach ich das dann.
8. Quelltext... ja das is eben ne gewohnheit von mir, werd ich natürlich noch bearbeiten.

Luckie 29. Dez 2004 10:58

Re: Ein Graphenzeichner
 
7. Das ist ja OK. Aber zeichne ihn doch einfach neu, dass man nicht selber erst wieder auf "Zeichnen" klicken muss.

Birzenbae 29. Dez 2004 17:18

Re: Ein Graphenzeichner
 
so habs jetzt ausgebessert:
-Ist alles in einem Fenster.
-Die Graphen verschwinden beim minimieren und maximieren nicht
-Beim Ändern des Koordinatensystems wird der aktuell angegebene Graph dem Koordinatensystem angepasst.
-Der Quelltext ist jetzt hoffentlich besser gestaltet

Den Donwload gibts oben.

Birzenbae 30. Dez 2004 01:58

Re: Ein Graphenzeichner
 
So erstmal tut mir leid wegen dem doppelpost, aber sonst liest das hier keiner.
hab jetzt paar kleinigkeiten mehr ausgebessert:
-Hab das Image für das Koordinatensystem kleiner gemacht, da die Leute, die die Auflösung auf 1024*768 eingestellt haben, einige Probleme mit der größe des Forms hatten.
-Beim ändern des Systems wird jetzt wirklich der zuletzt gezeichnete Graph auf die neuen Einstellungen angepasst.
-Es gibt eine Speicherfunktion mit der man das System samt Graphen als Bitmap speichern kann und kann mir jmd. sagen ob es SavePictureDialog auch schon in D6 gab?
-Es ist jetzt auch oop geschrieben, wär schön wenn das einer überprüfen könnte ob die Konventionen eingehalten wurden.
-statt der XP-Manifest-kompo hab ich es per resource gemacht, da wir in der Schule nur D6 haben

Download gibts oben.

supermuckl 30. Dez 2004 02:26

Re: Ein Graphenzeichner
 
Zitat:

kann mir jmd. sagen ob es SavePictureDialog auch schon in D6 gab?
gibts

Birzenbae 30. Dez 2004 02:31

Re: Ein Graphenzeichner
 
da bin ich aber froh, denn ich hab mal dem Oberchef in Info en Prog gegeben, wo die hälfte aller verwendeten Komponenten in D6 nicht gab.
Und sowat soll mir nich noch einmal passieren.

supermuckl 30. Dez 2004 02:33

Re: Ein Graphenzeichner
 
je nach delphi lizens-version ists unterschiedlich ausgebaut
aber D6 und D7 in der gleichen "stufe" sollten eigentlich fast gleich sein.. da fehlt nicht viel bzw garnix

ich hab D7 prof im geschäft und D6 ent zuhaus und hatte noch nie ein projekt, das ne fehlende VCL komponente beinhaltete

Birzenbae 30. Dez 2004 02:56

Re: Ein Graphenzeichner
 
ja aber ich hab eben D7 Ent und inna schule haben wir D6 Per oder Pro (weiss ich im mom nicht mehr genau).

Desweiteren hab ich mehrere ganz bööse fehler im quellcode des oop teils behoben

Download gibts wie immer oben


Alle Zeitangaben in WEZ +1. Es ist jetzt 17:40 Uhr.
Seite 1 von 2  1 2      

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