Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Multimedia (https://www.delphipraxis.net/16-multimedia/)
-   -   Delphi Funktionsgraphen zeichnen (https://www.delphipraxis.net/82990-funktionsgraphen-zeichnen.html)

Durin 23. Dez 2006 19:49


Funktionsgraphen zeichnen
 
Liste der Anhänge anzeigen (Anzahl: 1)
Abend,
Ich hab mich jetzt mal daran versucht ein Programm zu schreiben, welches funktionen zeichnet. Ich bin jetzt schon mal so weit, dass der Quelltext steht und auch keine Fehlermeldungen kommen. Das Programm will aber einfach nicht den Graphen zeichnen. Da die Suchfunktion im Moment nicht funzt, muss ich ein neuen Thread eröffnen, da er ja ein immenser Aufwand wär, dass Forum ohne Sufu zu durchsuchen. Also, ich hab jetzt 2 Probleme.
Das 1.( und unwichtigere): Wenn ich den Befehl zum zeichnen der Achsen und den Befehl zur einzeichnung der Einheiten auf einen Button mache, entstehen die Graphen nur für einen Bruchteil einer Sekunde udn verschwinden dann wieder. Das Problem hab ich jetzt erstmal provisorisch so gellöst das ich auf die Form.procedure den Befehl zum zeichnen der Einheiten und auf den Button "Achsen" das Zeichnen der Achsen gelegt habe. Diese Problem ist aber nicht weiter wichtig sondern nur eine Feinheit.
Das 2.Problem: Ich hab jetzt den Befehl zum zeichnen der Funktion geschrieben. Es kommen ja auch wie gesagt keine Fehlermeldungen, aber der Graph wird einfach nicht gezeichnet. Ich hab schon den moveTo und lineTo-Befehl an jede mögliche Stelle gesetzt, aber es geht einfach nicht. Desweiteren weis ich nicht wie man eine Funktion aus einen Editfeld herauslesen kann und dann mit in die Berechnung reinnehmen kann, z.B. x²*3x+8 oder so, sodass das Eidtfeld, welches dazu vorgesehen ist im Moment ohne Nutzen ist und die Funtkino direkt in den Quelltext geschrieben werden muss (im Moment y=x+1).
Könnt ihr mir weiterhelfen

flossinger 24. Dez 2006 09:18

Re: Funktionsgraphen zeichnen
 
Morgen,

Du hast da ein paar seltsame Dinge in deinem Programm.

Du zeichnest einmal auf der canvas vom image und einmal auf der canvas vom form. Das bringt unerwartete Ergebnisse.

Deine procedure TForm1.Button3Click zeichnet so überhaupt nichts.

Wenn du dein eigenes Programm mit dem debugger ansiehst,dann erkennst du sofort, warum das so ist.
Schau dir die Funktion der Tasten F4 F8 und F7 an und teste, was dein Programm macht. Ohne dieses debuggen wirst du kein Programm entwickeln können. Das ist einfach notwendig.

In der TForm1.Button3Click wird die while schleife niemals durchlaufen, weil du den Vergleichsoperator verkehrt verwendest. Es muss heissen:
Delphi-Quellcode:
while Image1.Left + u_achse < breite do
Dann zeichnet das Programm.

Was gezeichnet wird, ist aber nicht, das was du willst. Eine sehr seltsame Treppenlinie kommt da raus. Vielleicht hast du moveto und lineto verwechselt. Wenn du das eimal ansiehst, wirst du schon draufkommen, wie es geht.

edit: meine Vermutung war falsch. Im Nachhinein habe ich gesehen, woran es liegt: Du veränderste mit den Eineheiten gleichzeitig die Auflösung der gezeichneten Kurve. Das ist nicht gut. die Auflösung sollte schon feiner sein, als die Unterteilung der Einheiten. Das Verhältnis 1:10 bis 1:50 sollte da gut sein.

Dein Vorhaben, die zu plottende Funktionsgleichung aus einem edit Feld zu beziehen, ist sehr schwierig um zu setzen und stellt ein grösseres Vorhaben dar. Dazu sollte man schon recht fit sein.

Etwas leichter umzusetzen sind zwei andere Varianten:
1. Formeln auf dem form auswählen lassen: y=x, y=x*x, y=x*x*x usw.
2. Formeln durch Koeffizientenangaben modifizieren lassen: y=k1+k2*x+k3*x*x .... wobei die Koeffizienten in edit Felder eingetragen werden können. Die nicht benötigten Formelteile werden durch Koeffizienten mit der Grösse 0 automatisch deaktiviert.

grüsse,
der flossinger

Durin 24. Dez 2006 13:39

Re: Funktionsgraphen zeichnen
 
Danke.
Jetzt bin ich schon soweit, dass das Prog. den y-Wert richtig ausrechnet, jedoch kommt ja beim y-Wert ein real-wert raus. Jetzt brauch ich aber einen Integer-Wert, also Ganzzahlig. Ist es überhaupt machbar eine Gleitkomazahl in die Koordinaten eines Canvas zu bringen?

Flare 24. Dez 2006 14:04

Re: Funktionsgraphen zeichnen
 
Zitat:

Zitat von Durin
Ist es überhaupt machbar eine Gleitkomazahl in die Koordinaten eines Canvas zu bringen?

Nein, ist es nicht, aber mit Trunc() und/oder Round() sollte Abhilfe geschaffen sein.


Flare

Luckie 24. Dez 2006 15:53

Re: Funktionsgraphen zeichnen
 
Siehe auch http://www.michael-puff.de/dirindex....phi/Sonstiges/ -> SchraegerWurf.zip

21.000 Postings :firejump: :mrgreen:

Durin 25. Dez 2006 08:05

Re: Funktionsgraphen zeichnen
 
Jetzt bleibt mir nur noch ein Problem. Wenn ich 2mal auf den Zeichnen-Button klicke, erstellt er noch eine andere Linie die vollkommen schwachsinig ist. Ich schätz mal, dass kommt daher, dass er noch Werte aus den 1.Durchlauf speichert oder das ich lineTo und moveTo verdreht habe. Ich muss aber die 2 Befehle verdrehen, da er sonst nichts zeichnet

flossinger 25. Dez 2006 08:34

Re: Funktionsgraphen zeichnen
 
Mit dem Debugger wirst du schnell herausfinden, in welcher Reihenfolge dein Programm seine Aktionen ausführt. Dann kannst du leicht die nötigen Korrekturen anbringen. In Posting #2 steht, welche Tasten du verwenden kannst.

grüsse,
der flossinger


Alle Zeitangaben in WEZ +1. Es ist jetzt 21:08 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