Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Graphzeichner (https://www.delphipraxis.net/90422-graphzeichner.html)

Diff05 17. Apr 2007 12:53


Graphzeichner
 
Hallo!

Bitte helft uns! Wir sollen zum Ende des Schuljahres ein Projekt machen, dass eine Arbeit ersetzt. Leider können wir alle kein Informatik, brauchen aber mindestens eine 3 um nicht sitzen zu bleiben.. Das ist die Aufgabe:

Es soll ein Graphzeichner (auch Funktionenplotter) gezeichnet werden mit Hilfe des Delphi-Objekts CANVAS. Auf der linken Seite des Bildschirms sollen die entsprechenden Eingaben durch den User erflgen können und auf der rechten Seite soll dann der Graph gezeichnet werden.

Das Programm soll die Graphen von beliebigen linearen Funktionen y=a*x+b und die Graphen von beliebigen quadratischen Funktionen y=a*x²+b*x+c zeichnen können. Es soll eine geeignete Achbeschriftung vorhanden sein.


Helft uns bitte!
Danke im Vorraus!
Ideen reichen ;)

mkinzler 17. Apr 2007 13:02

Re: Graphzeichner
 
TChart ist nicht erlaubt?

Flare 17. Apr 2007 13:03

Re: Graphzeichner
 
Herzlich willkommen in der Delphi-Praxis :dp:

Wie weit seit ihr denn bis jetzt. bzw. wo haperts?

Und es ist schon mal praktisch, dass ihr bloß lineare und quadratische Funktionen beachten müsst, das macht das ganze einfacher.


Flare

fLaSh11 17. Apr 2007 13:07

Re: Graphzeichner
 
Lineare und Quadratische Funktionen haben soweit ich weiß keine Ausnahmen, d.h. einfach Punkte des Schaubilds ausrechnen, zeichnen und verbinden.

Robert Marquardt 17. Apr 2007 13:09

Re: Graphzeichner
 
Hausaufgaben zu loesen ist eigentlich nicht unserer Lebenszweck, trotzdem Willkommen bei der DP.

Die Eingabeseite ist relativ einfach. Es muessen ja nur a, b und c eingegeben werden. TEdits sollten da ausreichen.
Die wichtigste Entscheidung ist wie man die Auswahl der zu plottenden Funktion macht, denn es gibt ja zwei davon. In diesem Fall kann man die auswahl daran fest machen ob das Edit fuer den Parameter c leer ist oder nicht.

Ein Canvas ist nur eine Zeichenflaeche. Zur Darstellung braucht man ein Bild (TImage). Selbiges hat schon eine Canvas-Property auf den man zeichnen kann. Zeichnen tut man naemlich mit den Methoden des Canvas-Objektes.

Was muss man malen? Na die Funktion in einem Wertebereich (von x-Werten), z. B. von -7 bis 7.
Das Image mit seinem Canvas hat eine bestimmte Anzahl von Pixeln (z. B. 100 Pixel). Damit haben wir die Aufloesung in X-Richtung. Fuer Y waehlt man die gleiche Aufloesung.
Gemalt werden nicht Punkte, sondern Linien. Es muessen also immer zu zwei X-Koordinaten der Y-Wert berechnet werden, dann malt man die Linie. Der Y-Wert kann natuerlich ausserhalb des Image liegen, aber das handhabt der Canvas problemlos.

fLaSh11 17. Apr 2007 13:14

Re: Graphzeichner
 
Du könntest die Gleichung auch parsen, sodass man nur ein Editfeld hat und eingibt: "x^2-2x+1".

Ich könnte dir da bei Bedarf auch den QC dazu geben, denn ich hab sone Funktion schonmal gemacht, find sie grad nur nicht :)...

Stefan Hueg 17. Apr 2007 13:16

Re: Graphzeichner
 
Das Wichtigste hat Robert ja schon erläutert. Zusätzlich macht es mich etwas stutzig dass du sagst es sollen Graphen für beliebige Quadratische Funktionen geplottet werden. Meinst du mit "y=a*x²+b*x+c" dass die Graphen alle auf der Normfunktion basieren oder dass man tatsächlich sämtliche quadratische Funktionen eingeben kann? In dem Falle brauchst du nämlich einen mathematischen Parser :)

Zum Zeichen: Möglich ist es die einzelnen Koordinaten mit Punkten auf dem Canvas zu zeichnen, oder du verbindest immer zwei Punkte mit einer Linie. Das Plotten und die Berechnung muss dann natürlich in einer Schleife gelöst werden, klar ;)

3_of_8 17. Apr 2007 13:20

Re: Graphzeichner
 
Alle quadratischen, linearen und konstanten Funktionen (einfacher gesagt: Alle Polynomialfunktionen mit Grad <=2) lassen sich in die Form f(x)=ax²+bx+c bringen.

Von daher reicht die Eingabemaske für die Koeffizienten a, b, c.

fLaSh11 17. Apr 2007 13:24

Re: Graphzeichner
 
Ich find's aber unkomfortabel, wenn man zwischen 3 Edits hin und her springen muss, um die Gleichung einzugeben...
Außerdem wird's dem Lehrer wahrscheinlich auch gefallen :)

sirius 17. Apr 2007 13:29

Re: Graphzeichner
 
Und dann sieht der Lehrer, dass der Quellcode nicht von den Schülern selber ist. Was hat man damit gewonnen?

fLaSh11 17. Apr 2007 13:30

Re: Graphzeichner
 
der Schüler kann sich im I-Net informiert haben?!

Stefan Hueg 17. Apr 2007 13:34

Re: Graphzeichner
 
Zitat:

Zitat von fLaSh11
der Schüler kann sich im I-Net informiert haben?!

Eben. Und wenn es schon eine Unit zum Parsen von math. Ausdrücken gibt, muss man das Rad doch nicht neu erfinden? Versteh den Einwand nicht.

Robert Marquardt 17. Apr 2007 13:39

Re: Graphzeichner
 
Ich finde wir sollten hier keinen Sourcecode abgeben.
Was wir erklaeren sollten ist worum es geht. Ich habe ja damit schon angefangen.

Eine stetige Funktion soll innerhalb eines Wertebereiches auf eine endliche Matrix von Pixeln (aka TImage) abgebildet werden.
Der dazu noetige Canvas den ein TImage bereits hat ist uebrigens unbegrenzt. Das TImage ist ein Ausschnitt des Canvas mit der Pixelkoordinate 0,0 an der linken unteren Ecke.
Daraus folgt das der Wertebereich der Funktion auch zu den Eingaben gehoert, falls er nicht fest vorgegeben ist.

Robert Marquardt 17. Apr 2007 13:42

Re: Graphzeichner
 
Zitat:

Zitat von Stefan Hueg
Eben. Und wenn es schon eine Unit zum Parsen von math. Ausdrücken gibt, muss man das Rad doch nicht neu erfinden? Versteh den Einwand nicht.

Der Haupteinwand dazu ist das man die sekundaeren Probleme (in diesem Fall ein Problem des Userinterfaces) nicht zu kompliziert machen sollte. Das Hauptproblem das hier geloest werden soll ist das Zeichnen des Graphes 8und das bitteschoen zu Fuss).

fLaSh11 17. Apr 2007 13:42

Re: Graphzeichner
 
Zitat:

Zitat von Robert Marquardt
Ich finde wir sollten hier keinen Sourcecode abgeben.

Es sollte nur eine Erweiterung des Programmes sein, denn das was ich ihm geben wollte, wurde in der eigentlichen Aufgabenstellung gar nicht verlangt ;).

sirius 17. Apr 2007 13:52

Re: Graphzeichner
 
@robert: (0;0) ist in der linken oberen Ecke :zwinker:

@flash: Was bringt es, wenn Schüler, die noch nicht die anderen (recht einfachen) Sachen beherrschen mit einem Matheparser, den sie wahrscheinlich nicht einmal bedienen können, ankommen.
Da soll sich der Lehrer freuen: "Schön dass ihr hier Quellcode reinkopiert habt, den es hundertfach im INet gibt, den ihr aber nicht verstanden habt."
Zu meiner Schulzeit war INet noch nicht so IN, aber ich kann mir nicht vorstellen, dass dies Begeisterung und positive Eindrücke beim Lehrer hinterlässt.

fLaSh11 17. Apr 2007 14:54

Re: Graphzeichner
 
Zitat:

Zitat von sirius
Matheparser, den sie wahrscheinlich nicht einmal bedienen können, ankommen.

:mrgreen: ok, ok :mrgreen:

delphilover 19. Apr 2007 16:32

Re: Graphzeichner
 
hallo
hat jemand für diesen Graphzeichner ein fertiges Programm?
denn mich würde es auch interressieren und bitte auch einbisschen erklären wenns möglich ist.
wär schön wenn ihrs möglich bald postet!!!
schon mal danke im voraus :kiss:

der delphilover :angel: :love:

supermuckl 19. Apr 2007 16:48

Re: Graphzeichner
 
naja wenn du weist, wie man von der funktion zu den x und y koordinaten mathematisch kommt, dann machste da einfach
paintbox1.canvas.pixels[x,y] := clblack;

;)

Robert Marquardt 19. Apr 2007 16:51

Re: Graphzeichner
 
Anderen Leuten die Hausaufgaben zu erledigen sollte eigentlich nicht das Anliegen der Delphi-Praxis sein. Das faellt eigentlich nicht unter anderen Leuten helfen. Ich bin daher dagegen fertige Programme als Antwort hier zu posten.

delphilover 19. Apr 2007 16:57

Re: Graphzeichner
 
ja das denke ich auch für solche zwecke sollte man es wirklich nicht machen aber mich interessiert es und ich bin noch Anfänger daher brauche ich eine musterlösung wenn ihr mir nicht helfen wollt dann hab ich leider pech gehabt


trotzdem danke

:cry:

moritz 19. Apr 2007 16:59

Re: Graphzeichner
 
Meine Meinung. Genau genommen scheint es sich dabei um eine Art Abschlussarbeit zu handeln, und wenn ihr den Abschluss haben wollt, solltet ihr das auch schaffen. Right? Man hätte auch früher versuchen können, in anderen Fächern was besseres zu bekommen, damit es nicht an Informatik hängen bleibt.

Nichtsdestotrotz helfen wir euch gerne, aber die Arbeit für jemanden erledigen wird hier glaube ich keiner.

Einige Sachen sind ja schon gesagt worden. Da ihr nicht so versiert zu sein scheint würde ich auch einzelne TEdits für die Koeffizienten vorschlagen, diese müsst ihr dann in Zahlenwerte umwandeln.
Damit habt ihr alles, um den Y-Wert zu einem gewissen X-Wert erhalten zu können. Jetzt müsst ihr auf ein TCanvas nur noch euer Koordinatensystem malen und dann die umgerechneten X-Werte einsetzten und die Punkte Pixel für Pixel zeichnen.

Liebe Grüße,
Mo

Diff05 19. Apr 2007 18:55

Re: Graphzeichner
 
hey,

also wir haben bis jetzt nur einen Button, der das Koordinatensystem zeichnet.
Mit den meisten Anworten können wir nicht so viel anfangen.. Wir wissen nicht, wie man sowas umsetzt da wir bis jetzt nur einen Taschenrechner erstellen mussten. Der Lehrer hilft uns auch nicht weiter, wir sollen uns alles andere aus dem Internet holen...

Kann uns jemand vll wenigstens einen Teil oder einen Anfang geben?!

Liebe Grüße!

TonyR 19. Apr 2007 21:15

Re: Graphzeichner
 
Wie lange habt ihr schon Delphi? Kennst du dich wenigstens mit den Sprachgrundlagen aus? Und wie stehts mit Mathe? Ist da wenigstens noch das Wissen über Funktionen da?

Diff05 20. Apr 2007 09:49

Re: Graphzeichner
 
Wir können nur Rechtecke zeichnen, Striche zeichnen (lineto (x,y) und moveto (x,y)

Mehr können wir nicht! Hiiiiiiiiiiiiiiiiiiiiiilfeeeeeeeeeeeeeeeeeeeeeee!! !!!!!!!!!!

Wir können leider mit euren Tipps nichts anfangen..
es wäre nett on euch wenn ihr uns das gesamte oder nur ein teil ds programms schicken könntet!!
Bitteeeeeeeeeeeeeeeee.....
Haben euch lieb <3

Muetze1 20. Apr 2007 09:53

Re: Graphzeichner
 
Wir machen hier nicht eure Hausaufgaben. Wenn Ihr Linien etc zeichnen könnt, dann könnt ihr auch solche Formeln darstellen.

Wenn ihr euch meinen Stundensatz leisten könnt, dann könnt ihr mich theoretisch beauftragen - aber ich denke das klappt eh nicht. Ausserdem nur theoretisch, weil wenn ihr das selber macht lernt ihr es im Gegensatz zu vorgesetztem Code. Was meint ihr, wie wir zu unserem Wissen gekommen sind? Nicht durch ständiges machen lassen, abschreiben oder kopieren...

Tormentor32 20. Apr 2007 10:11

Re: Graphzeichner
 
Mal ein kleiner Denkansatz:

Ihr braucht eine Funktion, die drei Parameter hat, nämlich a,b und c (ax²+bx+c), diese Funktion muss einen Rückgabewert haben, der Rückgabewert ist Der Y Wert, der hinterher dargstellt wird.

Robert Marquardt 20. Apr 2007 10:24

Re: Graphzeichner
 
Na ihr solltet bis jetzt es hinbekommen haben eine Form mit drei TEdits und einem TImage, sowie einem Button zum Malen zu erstellen.

Die Arbeit erfolgt im OnClick des Buttons.
Erst mal das Image loeschen.

Delphi-Quellcode:
// Fuellfarbe festlegen
Image1.Canvas.Brush.Color := clWhite;
// Malfarbe festlegen
Image1.Canvas.Pen.Color := clBlack;
// alles mit Weiss fuellen
Image1.Canvas.FillRect(Image1.ClientRect);
Das Koordinatensystem und die Beschriftung lassen wir erst mal weg.
Der Wertebereich der Kurve muss festgelegt werden. Zur Vereinfachung solle man ihn erst mal konstant lassen. -10 bis + 10 fuer X und Y als Beispiel. Das bedeutet das Koordinatensystem hat seinen Nullpunkt in der Mitte des Image.
Jetzt muss man die Kurve malen. Wir klappern alle Punkte des Image in X-Richtung ab, also von 0 bis Image1.Width-1.
0 bedeutet X-Wert -10 und Width-1 X-Wert 10.
Die Faktoren a, b und c bezieht man aus den Editboxen (StrToInt als Stichwort). Formel ausrechnen und Y-Wert bekommen.
Der Y-Wert muss jetzt auf Pixelkoordinaten umgerechnet werden.

Jetzt breche ich mal ab und sehe wie weit ihr kommt oder ob man euch noch mehr vorkauen muss.

delphilover 20. Apr 2007 10:37

Re: Graphzeichner
 
hii

wie kriegt man ein TImage und was ist das überhaupt?

:gruebel:

Tormentor32 20. Apr 2007 11:02

Re: Graphzeichner
 
TImage ist eine Komponente zum Anzeigen von Bildern. Einfach wie einen Button aufs Formular ziehen. Sparte Zusätzlich.

delphilover 20. Apr 2007 11:07

Re: Graphzeichner
 
ich find das in der komponentenpalette nich :cry:

Tormentor32 20. Apr 2007 11:13

Re: Graphzeichner
 
Welche Delphiversion benutzt du?

alzaimar 20. Apr 2007 11:43

Re: Graphzeichner
 
Noch ein Tipp: F1.

Einfach im Code irgendwo TImage eintippen, F1 drücken, lesen.

cust0m 24. Apr 2007 13:44

Re: Graphzeichner
 
Hallo,

ich nehme mal an, dass das größte Problem beim Umwandeln der TImage-Koordinaten in brauchbare x-Werte liegen dürfte.
Leider bin ich nicht besonders versiert mit Programmieren, quasi ein Einsteiger.
Wollte euch nur einen Denkanstoß geben, damit ihnen besser geholfen wird, selbst habe ich leider keine Ahnung, würde mich aber auch interessieren.

Edit: Habe jetzt einfach mal die x-Koordinaten im TImage mit einer Case of-Anweisung festgesetzt. Ist vielleicht etwas plumb, aber da wir hier ja erstmal nur mit fixen x-Werten arbeiten (-10 bis +10) sollte das erstmal reichen. Mein Problem besteht jetzt noch darin, die y-Werte umzuwandeln. Meine Parabel zeichnet sich nach unten 8[.
Ich weiß nicht ob ich vllt gerade ne Denkblockade habe, irgendwie hab ich nämlich die ganze Zeit das Gefühl, die Lösung wäre ziemlich simpel... Naja wäre über nen Vorschlag hier sehr dankbar

Meine Idee hier wäre vllt, die Variablen einfach umzukehren. Also a:=StrToFloat(Edit1.Text)*(-1); und dann die y-Koordinate generell nach unten zu verschieben.. Hab leider gerade keine Zeit das auszuprobieren :/


Gruß

cust0m

Tormentor32 24. Apr 2007 14:30

Re: Graphzeichner
 
Der Punkt (0|0) befindet sich obenlinks im Image. Die Einfachste möglichkeit ist es, wie du sagst, einfach mit -1 zu multiplizieren, dabei musst jedoch beachten, dass du dann den Nullpunkt in der Darstellung anpassen musst, denn du willst ihn vermutlich in der Mitte des Bildes haben.

Hmm genau das hast du ja auch geschrieben im prinzip :oops:

Also einfach asuprobieren, sobald du Zeit hast!

cust0m 24. Apr 2007 15:45

Re: Graphzeichner
 
Ja scheint alles zu funktionieren.

Allerdings werden bisher nur die Punkte eingetragen, mit pen.width:=5 sieht das auch recht gut aus, aber ich hätte gerne eine schön abgerundete und vollständige Parabel, jemand eine Idee wie ich das machen könnte?

Ich glaube dazu müsste ich den Part mit der Case of-Anweisung wegstreichen und das ganze Variabel machen, da ja für eine scheinbar "runde" Parabel sehr viele Punkte berechnet werden müssten. Um eine durchgezogene Parabel statt einzelnen Punkten zu haben, wäre meine Idee den ersten Punkt separat zu berechnen um dann mit moveto den "Stift" schonmal dorthin zu bewegen. Dann könnte ich ja einfach alles mit lineto weiterzeichnen. Im Moment sieht das ganze so aus

image1.Canvas.pen.width:=5;
image1.canvas.MoveTo(x1,y1);
image1.canvas.LineTo(x1,y1);

so steht es in der Schleife und wir immer wieder durchlaufen, somit enstehen die Punkte. Einfach LineTo geht ja schließlich nicht, da sich sonst ein Strich von der unteren Mitte zum ersten Punkt ergeben würde -> ausgeschlossen, wo kämen wir denn
dann hin :roteyes:

Wie ließe sich das verwirklichen, oder gibt es andere Möglichkeiten? :wiejetzt:


Gruß

cust0m

Tormentor32 24. Apr 2007 16:02

Re: Graphzeichner
 
Du bist auf dem richtigen Weg! Aber das MoveTo musst du nur beim ersten Punkt machen, damit du den Strich nicht hast, bei allen anderen Punkten solltest du es weglassen, damit auch eine Parabel zusatande kommt.

Mackhack 24. Apr 2007 16:07

Re: Graphzeichner
 
Liste der Anhänge anzeigen (Anzahl: 1)
Hi,

sollte es sowas sein? Hab mich auch mal drangesetzt gehabt!

cust0m 24. Apr 2007 16:38

Re: Graphzeichner
 
Ja, so in etwa sollte das ganze aussehen.

Wie bekomme ich das ganze so hin, dass er die Linie bei der Parabel durchgehen zeichnet. Zudem wüsste ich gerne wie du die Punkte zur Orientierung gesetzt hast. FOR - TO - Schleife für jede "Reihe", das wäre ja auch wieder nicht variabel, es sei denn macht macht eine doppelte Schleife, naja ich denke schon wieder zu weit, eins nach dem anderen.

Also nochmal das, was ich gerne hinbekommen würde:
-Variable Einteilung (Sollte ich nun alleine hinbekommen)
-Durchgezogene Linie für die Graphen (Erledigt)
-Unterschiedliche Farben für jeden weiteren Graphen (Bisher nur unterschiedliche Farben für Linear und quadratisch)
-eine Anzeige die stets zeigt auf welcher x,y-Position sich der Mauszeiger befindet - Aber Koordinatensystem-Koordinaten, nicht die
"globalen" oder die vom TImage. Also z.B. wenn man mit der Maus nach links geht, in den negativen Bereich sollte er
z.B. (x: -4.75 | y: 3.25) anzeigen.

Wäre toll wenn mir jemand sagen könnte wie ich das ganze bewerkstelligen kann...


Gruß

cust0m

EDIT: EDIT: hat sich erledigt :gruebel:

LizardKaiser 24. Apr 2007 17:14

Re: Graphzeichner
 
@custom: schau dir mal MoveWindowOrg an ;)
bzw. für mathematisch-kartesische Zwecke:
SetViewportOrgEx


Alle Zeitangaben in WEZ +1. Es ist jetzt 21:57 Uhr.
Seite 1 von 2  1 2      

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 by Thomas Breitkreuz