![]() |
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 ;) |
Re: Graphzeichner
TChart ist nicht erlaubt?
|
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 |
Re: Graphzeichner
Lineare und Quadratische Funktionen haben soweit ich weiß keine Ausnahmen, d.h. einfach Punkte des Schaubilds ausrechnen, zeichnen und verbinden.
|
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. |
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 :)... |
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 ;) |
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. |
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 :) |
Re: Graphzeichner
Und dann sieht der Lehrer, dass der Quellcode nicht von den Schülern selber ist. Was hat man damit gewonnen?
|
Re: Graphzeichner
der Schüler kann sich im I-Net informiert haben?!
|
Re: Graphzeichner
Zitat:
|
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. |
Re: Graphzeichner
Zitat:
|
Re: Graphzeichner
Zitat:
|
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. |
Re: Graphzeichner
Zitat:
|
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: |
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; ;) |
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.
|
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: |
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 |
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! |
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?
|
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 |
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... |
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. |
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:
Das Koordinatensystem und die Beschriftung lassen wir erst mal weg.
// Fuellfarbe festlegen
Image1.Canvas.Brush.Color := clWhite; // Malfarbe festlegen Image1.Canvas.Pen.Color := clBlack; // alles mit Weiss fuellen Image1.Canvas.FillRect(Image1.ClientRect); 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. |
Re: Graphzeichner
hii
wie kriegt man ein TImage und was ist das überhaupt? :gruebel: |
Re: Graphzeichner
TImage ist eine Komponente zum Anzeigen von Bildern. Einfach wie einen Button aufs Formular ziehen. Sparte Zusätzlich.
|
Re: Graphzeichner
ich find das in der komponentenpalette nich :cry:
|
Re: Graphzeichner
Welche Delphiversion benutzt du?
|
Re: Graphzeichner
Noch ein Tipp: F1.
Einfach im Code irgendwo TImage eintippen, F1 drücken, lesen. |
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 |
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! |
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 |
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.
|
Re: Graphzeichner
Liste der Anhänge anzeigen (Anzahl: 1)
Hi,
sollte es sowas sein? Hab mich auch mal drangesetzt gehabt! |
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: |
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. |
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