![]() |
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 |
Re: Ein Graphenzeichner
Wie man so was auch wunderbar objektorientiert lösen kann, kannst du dir mal an meinem
![]() 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:
Läßt sich mit einer case-Anweisung eleganter lösen:
if Combobox1.text = 'Geradenfunktion' then
begin //... end else if Combobox1.Text = 'Potenzfunktion' then begin //... end else if Combobox1.Text = 'Wurzelfunktion' then begin //... end;
Delphi-Quellcode:
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.
case ComboBox1.ItemIndex of
0:; 1:; 2:; end; 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:
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:
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;
Delphi-Quellcode:
kann man lesen.
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; |
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. |
Re: Ein Graphenzeichner
7. Das ist ja OK. Aber zeichne ihn doch einfach neu, dass man nicht selber erst wieder auf "Zeichnen" klicken muss.
|
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. |
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. |
Re: Ein Graphenzeichner
Zitat:
|
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. |
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 |
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 14:41 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz