Autor Beitrag
Jakob_Ullmann
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 1747
Erhaltene Danke: 15

Win 7, *Ubuntu GNU/Linux*
*Anjuta* (C, C++, Python), Geany (Vala), Lazarus (Pascal), Eclipse (Java)
BeitragVerfasst: Fr 21.03.08 15:30 
Hi,

JTM ist ein Funktionsplotter (der im reellen Zahlenbereich arbeitet :wink: ) für beliebige Funktionen. Features sind:


  • Skalierung von Abszissen- und Ordinatenachse
  • Kopieren als Vektorgrafik (Windows MetaFile)
  • Drucken
  • Erstellen einer Wertetabelle
  • Drucken der Wertetabelle
  • Kopieren der Wertetabelle, um sie zum Beispiel in Excel oder in Word einzufügen
  • Mehrere Funktionen
  • Abspeichern / Öffnen des Plots
  • Bearbeiten von Farben
  • Grobes Nähern eines Integrals (Rechteck-Methode)
  • Erste Ableitung
  • Zweite Ableitung
  • Wahlweise zeichnen mit / ohne Grid
  • Gradueller Hintergrund
  • Beliebiges Verschieben einer Funktion in alle Richtungen (Funktion wird aktualisiert)
  • Zeichnen einer Legende
  • Kartesische- und Polarkoordinaten

Würde mich freuen, wenn ihr es mal ausprobiert.

Alte Speicherung
Zitat:
Gespeichert werden die Funktionen (*.jtm) und Farben (*.jcm). Normalerweise haben Farben und Funktionen denselben Namen (außer Dateikennung), aber man kann auch beliebige Listen laden / speichern. Beides erfolgt als Textdatei, die Funktionen sind durch Zeilenumbrüche getrennt, bei den Farben sieht es ungefähr so aus:

Zitat:

ColorA=FF0000
ColorB=0000FF
ColorC=0080FF
ColorD=008000
ColorE=FF0080
...


Also die normale Farbspeicherung eines ColorDialogs.


Neue Speicherung: [Funktionen]|||[Punkte]|||[Farben]|||StartX|||StartY|||TickX|||TickY
Also fast ein bisschen CSV... Kann man also mit einem Texteditor bearbeiten.

Beispielfunktion:

Zitat:
x^2+2*x+1


oder

Zitat:
sin(4*x)+sin(5*x)


Auf gar keinen Fall "y=..." oder "f(x)=..." schreiben! Für Hinzufügen einfach Enter drücken. Löschen geht mit dem Kontextmenü auf der linken Listbox.
Einloggen, um Attachments anzusehen!


Zuletzt bearbeitet von Jakob_Ullmann am Sa 27.09.08 15:48, insgesamt 27-mal bearbeitet
FinnO
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 1331
Erhaltene Danke: 123

Mac OSX, Arch
TypeScript (Webstorm), Kotlin, Clojure (IDEA), Golang (VSCode)
BeitragVerfasst: Sa 22.03.08 16:39 
Bei mir werden, egal was ich eingebe, nur fehlermeldungen ausgegeben.
Jakob_Ullmann Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 1747
Erhaltene Danke: 15

Win 7, *Ubuntu GNU/Linux*
*Anjuta* (C, C++, Python), Geany (Vala), Lazarus (Pascal), Eclipse (Java)
BeitragVerfasst: So 23.03.08 17:10 
Und was für Fehlermeldungen sind das? kannst du sie aufschreiben?

Achso: Möglich, dass es unter Win95 nicht läuft, da ich die TCoolBar verwende. Bei mir unter XP läuft es nämlich wunderbar.


Zuletzt bearbeitet von Jakob_Ullmann am Sa 07.06.08 11:23, insgesamt 1-mal bearbeitet
Silas
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 478

Windows XP Home
Delphi 2005, RAD Studio 2007, MASM32, FASM, SharpDevelop 3.0
BeitragVerfasst: So 23.03.08 17:33 
Moin!

Bei mir funktioniert das Programm an sich einwandfrei, allerdings hätte ich ein paar Verbesserungsvorschläge:
  • Die Liste sollte sich bearbeiten lassen (Popupmenü o.ä.)
  • Eine Farb-Spalte in der Liste wäre gut
  • Dein Parser "schreit" nicht bei ungültigen Operationen (n/0, sqrt(-1))
  • Statt einem Klick auf den Pfeil von f(x)=[       ] => sollte auch ein Druck auf Enter akzeptiert werden
  • Man sollte nicht bei jedem Diagramm zu einem sin(x) gezwungen werden :wink:
  • Der Parser sollte 2x als Ersatz für 2*x akzeptieren
  • Eine Unterstützung für "." und "," als DecimalSeparator wäre gut
  • Fehlerhafte Funktionsterme sollten nicht der Liste hinzugefügt werden.
  • Man kann nicht mehr als 16 Funktionen hinzufügen?!

[edit]Noch was hinzugefügt.[/edit]

_________________
Religionskriege sind nur Streitigkeiten darüber, wer den cooleren imaginären Freund hat ;-)
Jakob_Ullmann Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 1747
Erhaltene Danke: 15

Win 7, *Ubuntu GNU/Linux*
*Anjuta* (C, C++, Python), Geany (Vala), Lazarus (Pascal), Eclipse (Java)
BeitragVerfasst: So 23.03.08 18:05 
Hi,

Ich bin ja froh, dass es bei dir funktioniert.

- du wirst nicht zu einem Sinus gezwungen. Ziemlich versteckt findest du in der ToolBar zwei Symbole mit einem Baum (einem TreeView). Davon ist das eine mit einem grünen Plus versehen, das hat dieselbe Wirkung wie der Pfeil. Daneben ist noch ein anderes Symbol (das treenode_edit_24.bmp von GlyFX). Wenn du das checkst, kannst du bei einem Klick auf die Funktionsliste den aktuellen Eintrag bearbeiten (ihm wird die Funktion des Editierfeldes zugewießen. Ich gebe zu, es ist wirklich ziemlich versteckt. Ich suche noch nach einer besseren Möglichkeit.

- der Parser ist nicht von mir. Ich könnte natürlich aber eine Umänderung automatisch wirken lassen. Ich habe mir aber vorgenommen, den Parser selber zu schreiben, wenn der Rest perfekt funktioniert. Bis jetzt nutze ich den TParser10 von torry.net (habe den mal dort gefunden).

- eine Farbspalte ist auch geplant. Bisher kannst du die einzelnen Farben mit dem rechten Symbol der Toolbar bearbeiten.

- Bis jetzt kann man leider nicht mehr als 16 Farben verwenden, was auch auf eine maximale Anzahl von 16 Funktionen schließt. Ich werde versuchen, das Problem zu lösen.

- ich werde versuchen, einen Grammatik-Check durchzuführen.

- Bei sqrt(-1) tut er bei mit gar nichts. Tut er bei dir etwas anderes?


Ansonsten schonmal danke für's testen. Wenn ich diesen Beitrag hier abgeschickt habe, werde ich gleich eine neue Version hochladen (die jetzt ein Grid zeichnen kann).
Einloggen, um Attachments anzusehen!
Silas
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 478

Windows XP Home
Delphi 2005, RAD Studio 2007, MASM32, FASM, SharpDevelop 3.0
BeitragVerfasst: So 23.03.08 18:41 
user profile iconJakob_Ullmann hat folgendes geschrieben:
- du wirst nicht zu einem Sinus gezwungen.
Ich meinte damit eigentlich, dass es beim Start ohne Übernehmen der Liste hinzugefügt wird.

user profile iconJakob_Ullmann hat folgendes geschrieben:
Ziemlich versteckt findest du in der ToolBar zwei Symbole mit einem Baum (einem TreeView). Davon ist das eine mit einem grünen Plus versehen, das hat dieselbe Wirkung wie der Pfeil. Daneben ist noch ein anderes Symbol (das treenode_edit_24.bmp von GlyFX). Wenn du das checkst, kannst du bei einem Klick auf die Funktionsliste den aktuellen Eintrag bearbeiten (ihm wird die Funktion des Editierfeldes zugewießen. Ich gebe zu, es ist wirklich ziemlich versteckt. Ich suche noch nach einer besseren Möglichkeit.
Oh, hatte ich übersehen. Ich hab mir noch nicht viel Zeit genommen, aber ein Otto-Normal-Benutzer findet das denke ich bestimmt nicht. Über oder neben Der Liste wäre das IMHO intuitiver.

user profile iconJakob_Ullmann hat folgendes geschrieben:
- Bis jetzt kann man leider nicht mehr als 16 Farben verwenden, was auch auf eine maximale Anzahl von 16 Funktionen schließt.
Du kannst ja z.B. für jede Farbe vier Sättigungsstufen anbieten, dann wären es schon 64, was eigentlich reichen sollte.

user profile iconJakob_Ullmann hat folgendes geschrieben:
- Bei sqrt(-1) tut er bei mit gar nichts. Tut er bei dir etwas anderes?
Nein, aber es wäre gut, auf solche Fehler hingewiesen zu werden, dann wäre es einfacher, bei langen Termen einen solchen zu finden.

_________________
Religionskriege sind nur Streitigkeiten darüber, wer den cooleren imaginären Freund hat ;-)
Jakob_Ullmann Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 1747
Erhaltene Danke: 15

Win 7, *Ubuntu GNU/Linux*
*Anjuta* (C, C++, Python), Geany (Vala), Lazarus (Pascal), Eclipse (Java)
BeitragVerfasst: Mo 24.03.08 09:03 
Das Problem ist ja, dass auch sqrt(x) vorkommen kann. Dann soll er eben nur den positiven Teil plotten. Von daher kann das schwierig werden. Aber ich werde versuchen, das Problem zu lösen.
Wolle92
ontopic starontopic starontopic starontopic starontopic starofftopic starofftopic starofftopic star
Beiträge: 1296

Windows Vista Home Premium
Delphi 7 PE, Delphi 7 Portable, bald C++ & DirectX
BeitragVerfasst: Mo 24.03.08 09:18 
x musst du eben als sonderfall betrachten... nur dann ne meldung, wenn es ein statischer negativer wert ist...

_________________
1405006117752879898543142606244511569936384000000000.
Jakob_Ullmann Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 1747
Erhaltene Danke: 15

Win 7, *Ubuntu GNU/Linux*
*Anjuta* (C, C++, Python), Geany (Vala), Lazarus (Pascal), Eclipse (Java)
BeitragVerfasst: Mo 24.03.08 12:01 
Neu in Version 1.3:

- Jetzt gibt es einen Error bei "sqrt(-" in der Formel (eine Fehlermeldung, die den User darauf aufmerksam macht und die Position angibt).

- Grid zeichnen: Kann über Plot / Grid zeichnen aktiviert / deaktiviert werden

- Enter funktioniert jetzt für das Hinzufügen einer Formel (ein anderer Button hatte noch Default := true, deshalb hat es bis jetzt nicht funktioniert

- sin(x) ist am Anfang nicht mehr drin
Silas
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 478

Windows XP Home
Delphi 2005, RAD Studio 2007, MASM32, FASM, SharpDevelop 3.0
BeitragVerfasst: Mo 24.03.08 15:00 
user profile iconJakob_Ullmann hat folgendes geschrieben:
Das Problem ist ja, dass auch sqrt(x) vorkommen kann.
Ich kenne den Parser nicht, den du verwendest, aber sofern das nicht allzu schwierig ist, könntest du ja einen Hinweis in eine Liste (so a la Delphi-Meldungsliste) schreiben, dass einige werte u.U. undefiniert sein können (wenn es ein direktes sqrt(x) ist.

user profile iconJakob_Ullmann hat folgendes geschrieben:
Version 1.3
Sieht schon sehr gut aus, es wäre allerdings gut, wenn du die Syntax des Terms vor dem Hinzufügen zur Liste prüfen würdest und ggf. eben nicht hinzufügst. Wenn man nach einem fehlerhaften Term (inkl. Fehlermeldung) einen anderen, korrekten hinzufügt, bekommt man dieselbe Fehlermeldung wieder.

BTW: Ist es überhaupt nötig, das Diagramm nach dem Hinzufügen einer Funktion komplett neuzuzeichnen?

_________________
Religionskriege sind nur Streitigkeiten darüber, wer den cooleren imaginären Freund hat ;-)
Jakob_Ullmann Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 1747
Erhaltene Danke: 15

Win 7, *Ubuntu GNU/Linux*
*Anjuta* (C, C++, Python), Geany (Vala), Lazarus (Pascal), Eclipse (Java)
BeitragVerfasst: Mo 24.03.08 15:05 
user profile iconSilas hat folgendes geschrieben:
BTW: Ist es überhaupt nötig, das Diagramm nach dem Hinzufügen einer Funktion komplett neuzuzeichnen?


Naja, ich glaube schon. Jedenfalls habe ich es ohne Fehlermeldungen nicht anders hinbekommen (habe auch noch nie zuvor mit MetaFiles gearbeitet. Aber ich brauchte für das Kopieren unbedingt eine Vektorgrafik).
Jakob_Ullmann Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 1747
Erhaltene Danke: 15

Win 7, *Ubuntu GNU/Linux*
*Anjuta* (C, C++, Python), Geany (Vala), Lazarus (Pascal), Eclipse (Java)
BeitragVerfasst: Di 25.03.08 15:01 
Kleines Update (Version 1.5):

- Erste Ableitung zeichnen (unten)
- Gradueller Hintergrund (nur auf Wunsch des Users - standardmäßig nicht)

Noch etwas zum Zeichnen der ersten Ableitung:

a) selbst ein ' voranstellen
b) Plot / Anfügen / Erste Ableitung

Das heißt: möchte man die erste Ableitung von x² haben, dann schreibt man nicht x^2, sondern 'x^2. Man kann nur ein ' voranstellen. Die Funktionsliste könnte auch folgendermaßen aussehen:

ausblenden Quelltext
1:
2:
sin(x)
'sin(x)


Dann wird man auch feststellen, dass die erste Ableitung von Sinus der Cosinus ist ;-)

Notiz: Im Hintergrund wird folgende Formel erzeugt: (((x+0,1)^2)-((x-0,1)^2))/0,2 (bei x^2)
Jakob_Ullmann Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 1747
Erhaltene Danke: 15

Win 7, *Ubuntu GNU/Linux*
*Anjuta* (C, C++, Python), Geany (Vala), Lazarus (Pascal), Eclipse (Java)
BeitragVerfasst: So 13.04.08 17:16 
So: ein kleines Update! Jetzt kann man bei allen Druckern drucken! Auch bei Acrobat und nicht-300dpi-Druckern!
Jakob_Ullmann Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 1747
Erhaltene Danke: 15

Win 7, *Ubuntu GNU/Linux*
*Anjuta* (C, C++, Python), Geany (Vala), Lazarus (Pascal), Eclipse (Java)
BeitragVerfasst: Fr 02.05.08 16:50 
Wieder ein Update:

Änderungen an der Funktionalität:

- Man kann wählen, ob man die Ticks zeichnen möchte
- Farben werden mitgespeichert

Optische Änderungen:

- Es werden nicht nur Pfeile aus zwei Linien, sondern richtige gefüllte Pfeile gezeichnet (und kleiner als die davor)
- Die Ticks sowie Nummerierungen werden nur noch bei ganzen Zahlen gezeichnet (oder bei 50% bei Zahlen im Abstand von 0,5)
- Die Ticks werden kleiner gezeichnet
Jakob_Ullmann Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 1747
Erhaltene Danke: 15

Win 7, *Ubuntu GNU/Linux*
*Anjuta* (C, C++, Python), Geany (Vala), Lazarus (Pascal), Eclipse (Java)
BeitragVerfasst: Sa 07.06.08 11:11 
Wieder ein Update: Legende kann gezeichnet werden!
Silas
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 478

Windows XP Home
Delphi 2005, RAD Studio 2007, MASM32, FASM, SharpDevelop 3.0
BeitragVerfasst: Sa 07.06.08 12:20 
Moin,

hab mal wieder getestet:
  • Wäre gut, wenn JTM überprüfen würde, ob der Term leer ist, bevor er hinzugefügt wird (falls man aus Versehen auf Enter kommt, merkt mans nicht sofort)
  • Setz doch die Fensterposition auf poScreenCenter, weil auf meinem Bildschirm hängt's ein wenig über den Rand hinaus
  • Beim Speichern hat die Datei standardmäßig keine Endung, obwohl das Öffnen sie verlangt
  • Warum verwendest du zwei Dateien zum Speichern von einem Diagramm? Nimm doch eine INI für beides
  • Die Terme im Diagramm sollten weiß hinterlegt werden, sonst können sie unleserlich sein, wenn der Graph da durchgeht
  • Es wäre von den Farben her eindeutiger, wenn du die Schrift schwarz lässt und die Farbe als Quadrat vor die Terme zeichnest.
  • Man sollte den Graphen als Bitmap/PNG und vielleicht, wenn du eh schon mit Vektorgrafiken arbeitest, als SVG exportieren können
  • Wenn man die Gradienz ändert, sollte er automatisch neuzeichnen
  • Eine Zoom- und Verschiebfunktion für das Diagramm wäre gut
  • Wenn man die Größe der Leiste mit der Funktions- und Integralbox ändert, gibt es Fehler beim Zeichnen
Ansonsten: Man kann sehr schön damit malen ;)

_________________
Religionskriege sind nur Streitigkeiten darüber, wer den cooleren imaginären Freund hat ;-)
Jakob_Ullmann Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 1747
Erhaltene Danke: 15

Win 7, *Ubuntu GNU/Linux*
*Anjuta* (C, C++, Python), Geany (Vala), Lazarus (Pascal), Eclipse (Java)
BeitragVerfasst: Sa 07.06.08 12:37 
Wie kann ich SVG zeichnen? Ich mache jetzt alles mit Windows Metafiles (*.wmf).
Silas
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 478

Windows XP Home
Delphi 2005, RAD Studio 2007, MASM32, FASM, SharpDevelop 3.0
BeitragVerfasst: Sa 07.06.08 12:52 
SVGs sind XML-Dateien. Wikipedia sollte da denke ich weiterhelfen.

_________________
Religionskriege sind nur Streitigkeiten darüber, wer den cooleren imaginären Freund hat ;-)
Jakob_Ullmann Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 1747
Erhaltene Danke: 15

Win 7, *Ubuntu GNU/Linux*
*Anjuta* (C, C++, Python), Geany (Vala), Lazarus (Pascal), Eclipse (Java)
BeitragVerfasst: Sa 07.06.08 13:02 
Gibt's nicht irgendwie ein Tool, das WMF in SVG exportieren kann? Sonst müsste ich die Zeichenroutine noch einmal machen (für SVG).

Ich bin gerade dabei, deine Liste abzuarbeiten.

Erledigt ist:

Zitat:
[list][*] Wäre gut, wenn JTM überprüfen würde, ob der Term leer ist, bevor er hinzugefügt wird (falls man aus Versehen auf Enter kommt, merkt mans nicht sofort)
[*] Setz doch die Fensterposition auf poScreenCenter, weil auf meinem Bildschirm hängt's ein wenig über den Rand hinaus
[*] Beim Speichern hat die Datei standardmäßig keine Endung, obwohl das Öffnen sie verlangt
[*] Warum verwendest du zwei Dateien zum Speichern von einem Diagramm? Nimm doch eine INI für beides
[*] Die Terme im Diagramm sollten weiß hinterlegt werden, sonst können sie unleserlich sein, wenn der Graph da durchgeht</list]


Zitat:
Wenn man die Größe der Leiste mit der Funktions- und Integralbox ändert, gibt es Fehler beim Zeichnen

Ist bekannt, allerdings habe ich noch keine Idee, wie ich das Problem löse, weil ich noch nicht einmal weiß, wo das Problem liegt, ich vermute eher einen Fehler in Delphi oder Windows (tendiere zu Windows).
Silas
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 478

Windows XP Home
Delphi 2005, RAD Studio 2007, MASM32, FASM, SharpDevelop 3.0
BeitragVerfasst: Sa 07.06.08 13:15 
user profile iconJakob_Ullmann hat folgendes geschrieben:
Gibt's nicht irgendwie ein Tool, das WMF in SVG exportieren kann? Sonst müsste ich die Zeichenroutine noch einmal machen (für SVG).
Für was exportierst du denn in WMF? Zum drucken, oder? Hm, mir wäre da nichts bekannt, aber google doch einfach mal.

user profile iconJakob_Ullmann hat folgendes geschrieben:
user profile iconSilas hat folgendes geschrieben:
Wenn man die Größe der Leiste mit der Funktions- und Integralbox ändert, gibt es Fehler beim Zeichnen
Ist bekannt, allerdings habe ich noch keine Idee, wie ich das Problem löse, weil ich noch nicht einmal weiß, wo das Problem liegt, ich vermute eher einen Fehler in Delphi oder Windows (tendiere zu Windows).
Ich würde einfach beim verschieben die ganze Leiste links updaten/neuzeichnen.

_________________
Religionskriege sind nur Streitigkeiten darüber, wer den cooleren imaginären Freund hat ;-)