Entwickler-Ecke

Freeware Projekte - CKPlotter 2 (GDI+) - 2D-Funktionsplotter [NEUE VERSION]


CK_CK - Do 20.12.07 16:48
Titel: CKPlotter 2 (GDI+) - 2D-Funktionsplotter [NEUE VERSION]
Hallo,
ich habe gerade ein neues Programm fertiggestellt und es muss jetzt an euch getestet werden ;)
einem umfangreichen 2D-Funktionsplotter, der dabei aber einfach zu bedienen und (relativ) schnell ist.

Features:
Funktionen:
In Zukunft werden noch weitere Funktionen hinzukommen...

Changelog
Version 1.0 RC4
* Zoom-Funktion verbessert
* Funktionseditor verbessert
Version 1.0 RC3
+ Für sämtliche Funktionen existieren jetzt Hotkeys
* Im Vollbildmodus ist nun auch die Leiste mit Zusatzinfos zu sehen
* Fehler in der Druckfunktion behoben
* Die Berechnung des Plots beim Speichern geht schneller
Version 1.0 RC2
+ Die Plots lassen sich jetzt in beliebigen Größen drucken
+ Kurvendiskussion (alpha-Version) hinzugefügt
+ Wertetabelle hinzugefügt (Ausgabe als .csv möglich)
+ Versionscheck über das Internet möglich
+ About-Dialog hinzugefügt
+ X/Y - Werte unter der Maus werden unter dem Plot angezeigt
+ Mit der Mittleren Maustaste lässt sich ein Punkt markieren (mit Beschriftung)
+ Vollbildanzeige mit Doppelklick oder rechter Maustaste
* Der Plot wird bei Mausbewegungen nur noch bei Bedarf aktualisiert
Version 1.0 RC1
+ Oversampling-Funktion eingebaut. Noch genauere Plots möglich
* Oversampling-Einstellungen im Render-Optionen - Dialog eingebaut
* Oversampling-Einstellungen im Bild formatiert speichern - Dialog eingebaut
Version 1.0 beta2
+ Render-Einstellungen - Dialog hinzugefügt (z.B. Auswahl, ob AntiAlias aktiv sein soll)
+ Render-Einstellungen werden beim Beenden gespeichert
* Graph-Rendering verbessert (genauer)
Version 1.0 beta
+ Plots werden ab jetzt mit GDI+ gerendert (Antialiasing)
+ Beschriftungs-Editor hinzugefügt
+ Exportieren im Vektorformat möglich
* Graph kann jetzt Fokus erhalten (z.B. zum Zoomen)
* Anzeige der Achsen verbessert
* Verschiedene Design-Verbesserungen
* Einige kleinere Bugs wurden behoben
Version 0.9.6
+ Die Dateierweiterung .ckp kann auf Wunsch registriert werden
* Parser verbessert (ungültige Funktionen werfen keine Fehler mehr)
* Render-Geschwindigkeit verbessert
* Auf neues Dateiformat umgestellt (xml-ähnlich)
* Öffnen mit Parameter möglich (Dateiname)
* Ein paar kleinere Fehler behoben
Version 0.9.5
+ Formeleditor hinzugefügt (Doppelklick auf die Formel zum Öffnen)
+ Zoomen mit Mausrad möglich
* Bessere Komponenten für die Farbwahl eingefügt
* Enabled-Eigenschaften der Buttons werden richtig gesetzt
* Definition des Anzeigebereichs verbessert
* Beim hinzufügen neuer Formeln wird die Neue im ListView automatisch selektiert Zugriffsverletzung behoben

Screenshot
user defined image

Download-Links
> Direkt-Download [http://www.kroegerama.de/cms/download.php?fid=18] [Version 1.0 RC4] (1.06 MB)
> Programm-Beschreibung und mehr Screenshots [http://www.kroegerama.de/cms/programs/7-CKPlotter-2.html]

So, viel Spaß beim Testen ;),
Chris


F34r0fTh3D4rk - Do 20.12.07 16:54

ich hab mal folgendes probiert:

Quelltext
1:
sqrt(x/x)                    

meines Erachtens hat diese Funktion den Definitionsbereich D = (x > 0), allerdings zeichnet dein Programm auch im negativen Zahlenbereich, hat das seine Richtigkeit ? Ich sehe dass man den Wertebereich selbst angegeben kann.

Ansonsten finde ich das Programm schon recht praktisch. Cool wären natürlich noch so Sachen wie Umkehrfunktionen / Ableitungen / Integrale / Differenzfunktion bestimmen lassen, aber das ist ein wenig viel erwartet, wobei man sicherlich das eine oder andere umsetzen kann.

Achja, ich bekam so eben eine AV, als ich auf öffnen und dann auf nein geklickt habe:

Quelltext
1:
2:
3:
4:
5:
6:
7:
---------------------------
CKPlotter 2
---------------------------
Zugriffsverletzung bei Adresse 0047F00C in Modul 'CKPlotter2.exe'. Lesen von Adresse 00000004.
---------------------------
OK   
---------------------------


mfg


CK_CK - Do 20.12.07 16:57

Hi!
Vielen Dank für deine Antwort.

Sqrt(x/x) ist Wurzel aus x durch x...
...und x durch x ist IMMER 1, oder irre ich mich da?

Deine zusätzlichen Vorschläge finde ich klasse. Mal sehen, ob ich so etwas irgendwie einbauen kann ;)

Chris

EDIT: OK, werde heute Abend nach dem Fehler suchen. Jetzt muss erstmal mein Hund raus ;)


F34r0fTh3D4rk - Do 20.12.07 16:59

Allerdings gibt es ein problem, wenn x = 0 und wenn x < 0, denn man darf weder durch 0 teilen, noch wurzeln aus negativen Zahlen ziehen (außer im System der komplexen Zahlen), deshalb sollte die Gerade nur im ersten Quadranten zu sehen sein.

Sehr gut finde ich, dass man Bilder in allen möglichen Größen und Formaten speichern und diverse Farben etc. auswählen kann, ich denke, dass ich in Zukunft dieses Programm nutzen werde, wenn ich mal wieder eine Funktion zeichnen muss ;)

€: wenn nur noch eine funktion da ist, kann ich diese irgendwie nicht löschen, gut wäre noch sowas wie "alle anhaken" "keine anhaken".

mfg


CK_CK - Do 20.12.07 17:04

Hmm, ich glaube, ich verstehe dich nicht richtig...

Der Parser berechnet für jedes x zuerst x/x (z.B. 0/0, was undefiniert ist oder auch (-44)/(-44)). Und negativ durch negativ ist doch positiv, also Wurzel möglich...
Also kann x ja nicht gleichzeitig 0 und <0 sein...

Freut mich aber, dass dir das Programm gefällt 8)

Chris


F34r0fTh3D4rk - Do 20.12.07 17:08

stimmt, du hast recht, anderes beispiel:


Quelltext
1:
sqrt(1/x)                    

oder einfach: sqrt(x)

achja, cool wäre, wenn man senkrechten einzeichnen könnte.

kurvenscharen wären auch noch ne erweiterung, sodass man einen weiteren parameter variieren kann und sieht, wie sich die kurve verhält.
(geht auch schon ein bissl über den einfachen plotter hinaus, ist aber nicht schwer zu implementieren)

mfg


Marc. - Do 20.12.07 17:25

Hey!
Ähnelt etwas dem Geogebra. Aber gefällt mir! :zustimm:

Ein paar Kritikpunkte und Vorschläge hätte ich aber dennoch:
• Farbpalette verschwindet im Vollbild-Modus (siehe Anhang)
• Meines Erachtens ist das Fenster für die Funktion defitiniv zu klein. Eine einfache breitere Zeile würde die Leserlichkeit drastig erhöhen
• Verschiebung der Sicht stockt etwas
• Keine einzeichbaren Punkte
• Keine Strecken einzeichbar
• Keine Tangenten und Normalen
• keine Flächen
• Funktionen lassen sich nicht per Maus verschieben
• Berechnung von:
• Schnittpunkt
• Extremwerten
• Integralen
• Grenzwerten
• Winkeln
• Abständen etc. fehlt
usw.
Das wäre noch wünschenswert. :)

Grüße
Marc


CK_CK - Do 20.12.07 18:36

Wow, das sind viele Punkte :shock:
Eigentlich wollte ich das Programm "einfach" gestalten, also wie den Windows-Taschenrechner, um es "mal so zwischendurch" zu verwenden...

Ich werde jedoch trotzdem versuchen, alle eure Vorschläge umzusetzen. Ich werde dabei versuchen, das Programm nicht zu überladen. Wahrscheinlich wird morgen schon die nächste Version fertig sein...

Viele Grüße und schonmal vielen Dank für eure Testberichte,
Chris

PS: @F34r0fTh3D4rk: "Alle aktivieren" und "Alle deaktivieren" erreichst du über die Rechte Maustaste ;)


Tarry - Do 20.12.07 19:19

Hi,
klasse Prog :zustimm:
Es wäre noch klasse, wenn man mit dem Mausrad "zoomen" könnte, also den Bereich vergrößern / verkleinern.

Aber sonst ist mir nichts aufgefallen, wirklich schön geworden.

Gruß
Tarry

PS: Achja, vll wäre es noch nett, wenn das Prog auch Formeln im Styl von y=x erkennt oder du es irgendwo dazu schreibst, dass man sich das y= schenke kann...


Regan - Do 20.12.07 21:03

Moin,
echt cooles Ding. Mir sind ein paar wenige Punkte aufgefallen:

Alles in allem für dich, denke ich, leicht zu lösende Sachen. Vielleicht überholst du ja noch Geogebra :wink: .

MfG
Regan


CK_CK - Fr 21.12.07 16:03

Vielen Dank für all eure Vorschläge. Ich werde auf jeden Fall weiter daran arbeiten. Hier mal der aktuelle Stand:

Version 0.9.5
+ Formeleditor hinzugefügt (Doppelklick auf die Formel zum Öffnen)
+ Zoomen mit Mausrad möglich
* Bessere Komponenten für die Farbwahl eingefügt
* Enabled-Eigenschaften der Buttons werden richtig gesetzt
* Definition des Anzeigebereichs verbessert
* Beim hinzufügen neuer Formeln wird die Neue im ListView automatisch selektiert Zugriffsverletzung behoben

Screenshot vom neuen Formeleditor
user defined image

Viele Grüße,
Chris


F34r0fTh3D4rk - Sa 22.12.07 13:36

Es gibt leider immernoch Fehler, wenn man das Speichern abbricht.

mfg


CK_CK - Sa 22.12.07 15:22

So, jetzt sollte der Fehler weg sein. Wenn er immer noch besteht, sag' mir doch mal bitte, was du genau tun musstest um ihn zu erzeugen...

Version 0.9.6
+ Die Dateierweiterung .ckp kann auf Wunsch registriert werden
* Parser verbessert (ungültige Funktionen werfen keine Fehler mehr)
* Render-Geschwindigkeit verbessert
* Auf neues Dateiformat umgestellt (xml-ähnlich)
* Öffnen mit Parameter möglich (Dateiname)
* Ein paar kleinere Fehler behoben

Viele Grüße,
Chris


delfiphan - Sa 22.12.07 17:38

Da ich vor ein paar Jahren selber mal sowas ähnliches [http://www.delphi-forum.de/viewtopic.php?t=37978] gemacht habe, hier noch einige Vorschläge:

- Ich finde es wichtig, das Bild als Vektorgraphik (eps, emf, svg) abspeichern zu können. Ebenso Titel/Achsenbeschriftung/Legende. Ist vor allem beim Druck dann schöner.
- Bei steilen Funktionen wird die Linie nicht vollständig bis zum Bildschirmrand gezeichnet.
- Die Bildfläche kann keinen Fokus erhalten. Das Bild zoomt immer mit dem Scrollrad, auch wenn z.B. das Feld "Schrittweite" fokussiert ist.
- Die "Stil"-Listbox zeigt einen komischen Effekt (siehe Bild)
- Stil "gepunktet" geht irgendwie nicht
- Ich habe es nicht geschafft, die Achsen/Hintergrundfarbe zu ändern
- Bei einem Fehler in der Formel passiert einfach nichts
- Heutzutage würde ich vermutlich geglättete Linien verwenden

Alles in allem gefällt er mir recht gut :zustimm:


CK_CK - Sa 22.12.07 18:45

user profile icondelfiphan hat folgendes geschrieben:
Ich finde es wichtig, das Bild als Vektorgraphik (eps, emf, svg) abspeichern zu können. Ebenso Titel/Achsenbeschriftung/Legende. Ist vor allem beim Druck dann schöner.
Finde ich gut. Wird in einer der kommenden Versionen eingebaut...
user profile icondelfiphan hat folgendes geschrieben:
Bei steilen Funktionen wird die Linie nicht vollständig bis zum Bildschirmrand gezeichnet.
Wird ebenfalls verbessert ;)
user profile icondelfiphan hat folgendes geschrieben:
Die Bildfläche kann keinen Fokus erhalten. Das Bild zoomt immer mit dem Scrollrad, auch wenn z.B. das Feld "Schrittweite" fokussiert ist.
Ist behoben. Jetzt wird nur noch gezoomt, wenn die Maus über der Komponente ist...
user profile icondelfiphan hat folgendes geschrieben:
Die "Stil"-Listbox zeigt einen komischen Effekt (siehe Bild)
Stil "gepunktet" geht irgendwie nicht
Das Symbol bedeutet, dass Punkte geplottet werden sollen, statt Linien. Am besten zu Sehen bei steilen Funktionen (5sin(x) mit Anzeigebereich 10)
user profile icondelfiphan hat folgendes geschrieben:
Ich habe es nicht geschafft, die Achsen/Hintergrundfarbe zu ändern
Ich hatte das OnChange-Ereignis vergessen ;) Ist jetzt behoben...
user profile icondelfiphan hat folgendes geschrieben:
Bei einem Fehler in der Formel passiert einfach nichts
In Zukunft wird eine Warnung ausgegeben, wenn die Formel falsch ist. Ich arbeite aber noch daran =)
user profile icondelfiphan hat folgendes geschrieben:
Heutzutage würde ich vermutlich geglättete Linien verwenden
Würde ich auch gerne, ich habe aber noch keine (einfache) Möglichkeit gefunden, welche zu zeichnen. Intern benutze ich ein TBitmap als Buffer. Gibt es eventuell einen Ersatz dafür, mit einem Canvas das Antialias unterstützt?

user profile icondelfiphan hat folgendes geschrieben:
Alles in allem gefällt er mir recht gut :zustimm:
Vielen Dank ;)

Chris


F34r0fTh3D4rk - Sa 22.12.07 18:58

Ich glaube, delfiphan höchstselbst hat im DF mal einen Code gepostet um Geglättete (auch dicke) Linien zu zeichnen, einfach mal suchen ;)

mfg


delfiphan - Sa 22.12.07 20:47

user profile iconF34r0fTh3D4rk hat folgendes geschrieben:
Ich glaube, delfiphan höchstselbst hat im DF mal einen Code gepostet um Geglättete (auch dicke) Linien zu zeichnen, einfach mal suchen ;)

Ach ja, die sind aber nicht ganz so universell und wohl auch nicht ganz so schnell. Ich würde die GDI+ Library verwenden, ist ab Windows XP mit dabei. Da kann man auch die Strichdicke wählen, und Effekte wie gepunktete Linien und so sollte auch gehen. Wie man die in Delphi nutzt, sollte im Forum oder im Internet zu finden sein.


CK_CK - Mi 26.12.07 21:14

So, ich habe das gesamte Teil auf GDI+ umgeschrieben...
Die Plots sehen nun wesentlich schöner aus ;)

Und Exportieren im Vektorformat ist nun auch möglich...

Der neue Beschriftungs-Editor:
user defined image

Version 1.0 beta
+ Plots werden ab jetzt mit GDI+ gerendert (Antialiasing)
+ Beschriftungs-Editor hinzugefügt
+ Exportieren im Vektorformat möglich
* Graph kann jetzt Fokus erhalten (z.B. zum Zoomen)
* Anzeige der Achsen verbessert
* Verschiedene Design-Verbesserungen
* Einige kleinere Bugs wurden behoben

Viele Grüße,
Chris


delfiphan - Mi 26.12.07 23:38

Sehr schön! Eine Sache stört mich aber noch: Das Antialiasing sieht bei nahezu horizontalen Linien nicht so schön aus. Aber folgende zwei Tipps könnten helfen: Linien, die am Stück sind, sollten auch am Stück gezeichnet werden. Dazu gibt es die Funktion GdipDrawLines oder wenn du die TGPGraphics verwendest siehe DrawLines. Dort kannst du gleich ein Array von Punkten übergeben. Das hast du aber vermutlich schon so drin, sonst würden die gepunkteten Linien wohl nicht richtig funktionieren. Zweitens (daran wird es wahrscheinlich liegen): GDI+ stellt jeweils Zeichenfunktionen für ganzzahlige und auch nicht ganzzahlige Koordinaten zur Verfügung. Runden musst du die Koordinaten also nicht wie bei TCanvas. Zu meinem Postingsjubiläum noch ein Bild zur Verdeutlichung im Anhang ;) Statt wie a) sollte es dann wie b) aussehen.


CK_CK - Do 27.12.07 12:28

Hi!
Ja, du hast recht. Ich verwende DrawLines und ich runde auch die Punkte...
(Habe es gerade getestet und ohne Runden sieht's so aus, wie du es willst)

Werde heute Abend das Programm updaten ;)

Chris


delfiphan - Do 27.12.07 13:05

user profile iconCK_CK hat folgendes geschrieben:
(...) ohne Runden sieht's so aus, wie du es willst

"Wie ich es will" :lol: Naja, für mich ist der Unterschied von a nach b etwa so gross wie von ohne Antialiasing zu mit Antialiasing. Vielleicht sieht man das nur auf einem LCD-Bildschirm so richtig? :)

Beim Zeichnen von Buchstaben macht Windows mit Cleartype ja sogar noch eine Subpixeloptimierung - berücksichtigt also, dass die drei Grundfarben (Subpixel) rot/grün/blau des Bildschirmes nebeneinander angeordnet sind. Das macht nochmals eine Verbesserung von ca. 20% aus. Soweit würde ich bei den Plots dann aber doch auch nicht gehen ;) (Beim Mandelbrotbild im Anhang habe ich das spasseshalber mal gemacht ;))


CK_CK - Do 27.12.07 19:33

Keine Ahnung, ich habe auch nur TFT-Bildschirme hier ;)
Da sieht man wirklich einen deutlichen Unterschied!

Die neue Version ist fertig...

Version 1.0 beta2
+ Render-Einstellungen - Dialog hinzugefügt (z.B. Auswahl, ob AntiAlias aktiv sein soll)
+ Render-Einstellungen werden beim Beenden gespeichert
* Graph-Rendering verbessert (genauer)

Der neue Render-Einstellungen - Dialog
user defined image

Viele Grüße,
Chris


delfiphan - Do 27.12.07 23:34

Ich glaube die Zip-Datei für beta2 ist die gleiche wie die von beta1.


CK_CK - Do 27.12.07 23:40

Ups, gut dass mir das mal jemand sagt ;)

Hab' die Datei aktualisiert... *peinlich*

Chris


delfiphan - Fr 28.12.07 00:13

Hier noch ein Hinweis. Macht aber kein mir bekannter Plotter, wäre aber eigentlich wichtig. Anti-Aliasing der Linien sieht schön aus, aber garantiert noch lange nicht, dass der Plot korrekt ist. Der Graph/Plot einer Funktion ist nämlich definiert als die Punktmenge (x,f(x)) mit x reell. Wenn man für x nur einige wenige Werte rauspickt, muss man aufpassen.

1. Wenn die Abtastweite dem Nyquist-Shannon-Theorem nicht genügt, gibt es Aliasing-Artefakte. Du machst implizit die Annahme, dass die lokale Abtastfrequenz mindestens doppelt so hoch ist wie die lokale Frequenz der zu zeichnenden Funktion. Ist dies nicht der Fall, zeichnet dein Plotter eine falsche Funktion ;) Der Effekt ist der gleiche wie bei einem Film, wo sich die Autoräder plötzlich rückwärts drehen. Die Darstellung kann also von der Realität fast beliebig weit abweichen.

Verdeutlichung im Anhang:
Wenn die Frequenz einer Funktion stetig zunimmt und nicht mehr genügend hoch abgetastet wird, dann gibt es einen Phasensprung: Die Frequenz der gezeichneten Funktion springt plötzlich ins Negative (bei gleichbleibendem Betrag). Nimmt die Frequenz der zu zeichnenden Funktion weiter zu, nimmt der Betrag der Frequenz der gezeichneten Funktion ab, bis sie Null wird (dieses Spiel wiederholt sich dann immer wieder). So ein Phasensprung führt zu einer Spiegelung und Wiederholung (siehe Bild Anhang, oben): Die geplottete Funktion weicht extrem von der Realität ab. Korrekter wäre die Darstellung im zweiten Bild unten (wobei auch hier gesagt werden muss, dass der Raum an den Enden keineswegs vollständig ausgefüllt wird, sondern eigentlich viel mehr Punkte weiss als schwarz sein müssten ;) aber das ist eine Darstellungsfrage).

Durch eine adaptive Schrittweitensteuerung könnte man sowas automatisch umgehen. Das ist aber vermutlich nicht ganz so einfach zu implementieren. In einem "Final Rendering" sollte man aber vielleicht zu mindest die Schrittweite verfeinern können (auch wenn sie nicht dynamisch ist).

2. Ich habe gesehen, dass bei Polen (z.B. 1/(x-1)) kein Strich die Unstetigkeit verbindet. Das ist auch richtig so. Bei Sprungfunktionen jedoch (z.B. abs(x-1)/(x-1)) wird die Unstetigkeit verbunden. Laut Definition eines Graphen ist dies eigentlich falsch.

Sind nur Hinweise ;)


CK_CK - Fr 28.12.07 13:20

Respekt, du scheinst dich gut mit sowas auszukennen...

Also, zu 1: Der Plotter berechnet für jeden Breitenpixel einen Höhenpixel (bei 800x600 werden also 800 Werte dargestellt). Deswegen fällt mir im Moment keine Möglichkeit ein, wie ich das genauer machen kann...
Ich werde aber mal gucken, ob/wie ich eine "adaptive Schrittweitensteuerung" einbauen kann ;)

Zu 2: Das ist auf jeden Fall nicht gewollt. Ich werde versuchen, den Fehler zu finden...

Chris


delfiphan - Fr 28.12.07 13:40

Einfache Lösung zu 1 wäre, wenn du noch eine Option einbaust, damit der User selbst eingeben kann, wie gross die Schrittweite sein soll. z.B. bei "10x Oversampling" würde man bei 800x600 entsprechend 8000 Striche zeichnen statt 800. Dann ist der User dafür "verantwortlich" einen genügend kleinen Abstand zu wählen, um ein schönes Bild zu erhalten ;) Mit der GDI+ kann man ja ohne Probleme mit halben Pixeln arbeiten. Entsprechend langsam wird der Bildaufbau natürlich...

Wie gesagt macht das ja eigentlich kein mir bekannter Plotter. War nur so ne Idee. ;)


F34r0fTh3D4rk - Fr 28.12.07 13:50

GeoGebra scheint die Funktion (fast) richtig zu zeichnen, ist aber auch sichtlich überfordert damit ;)


mfg


CK_CK - Fr 28.12.07 14:35

So, vielen Dank für die Idee. Oversampling ist eingebaut:

Version 1.0 RC1
+ Oversampling-Funktion eingebaut. Noch genauere Plots möglich
* Oversampling-Einstellungen im Render-Optionen - Dialog eingebaut
* Oversampling-Einstellungen im Bild formatiert speichern - Dialog eingebaut

In Anhang sind Vergleichsbilder...

Sonnige Grüße,
Chris


delfiphan - Fr 28.12.07 21:21

Noch ein Vorschlag zur Geschwindigkeitsoptimierung. Im Moment wird beim Verschieben der Achsen via Drag&Drop bei jeder Mausbewegung alles neugezeichnet. Besser wäre, wenn der Plot nur dann neugezeichnet wird, wenn auch wirklich etwas verschoben wurde. Gib z.B. mal rand(1) ein und versuche die Achsen wenig zu verschieben.


CK_CK - Do 03.01.08 22:57

Ja, da war ein Invalidate an der falschen Stelle... :oops:

Ich habe viele neue Funktionen eingebaut und würde mich über weitere Tests freuen:
Version 1.0 RC2
+ Die Plots lassen sich jetzt in beliebigen Größen drucken
+ Kurvendiskussion (alpha-Version) hinzugefügt
+ Wertetabelle hinzugefügt (Ausgabe als .csv möglich)
+ Versionscheck über das Internet möglich
+ About-Dialog hinzugefügt
+ X/Y - Werte unter der Maus werden unter dem Plot angezeigt
+ Mit der Mittleren Maustaste lässt sich ein Punkt markieren (mit Beschriftung)
+ Vollbildanzeige mit Doppelklick oder rechter Maustaste
* Der Plot wird bei Mausbewegungen nur noch bei Bedarf aktualisiert

Liebe Grüße,
Chris


delfiphan - Fr 04.01.08 00:50

Vielleicht diese zwei Sachen:
- Doppelte Nullstellen (x^2) werden nicht erkannt.
- Schliessen von Dialogfenster (z.B. About-Box) via Escape


CK_CK - Fr 04.01.08 13:14

"Doppelte Nullstellen (x^2) werden nicht erkannt."
> x^2 hat auch nur eine Nullstelle ;) Aber die wird auch nicht erkannt. Ich muss den Algorithmus da noch anpassen.

Ich hab' mir das so gedacht: Man lässt eine Funktion plotten (z.B. x^2-5) und doppelklickt dann in der Funktionsliste auf diese Funktion. Dies öffnet die Kurvendiskussion.
Man sieht jetzt in dem Plot, dass irgendwo zwischen 2 und 3 eine Nullstelle liegt, also kann man diese Werte als Intervall wählen. Und schon bekommt man das Ergebnis (2,23606797750108)...

"Schliessen von Dialogfenster (z.B. About-Box) via Escape"
> Hört sich gut an. Wird mit eingebaut...

Chris


F34r0fTh3D4rk - Fr 04.01.08 13:19

x^2 hat zwei Nullstellen:


Quelltext
1:
2:
3:
x^2 = 0
x1 = 0
x2 = -0

auch wenn sie an der gleichen Stelle sind, sind es zwei ;) (Quadratische Gleichung -> Zwei Lösungen)

mfg


delfiphan - Fr 04.01.08 19:12

x^2 hat nur eine Nullstelle, die ist aber doppelt (nennt sich so, per Definition). "Gerade Nullstellen" (dazu gehören doppelte) überqueren die x-Achse nicht, ungerade jedoch schon. Siehe "Vielfachheit einer Nullstelle".

Aber ich denke, es ist umgangssprachlich okay wenn man statt "eine doppelte Nullstelle" auch mal "zwei Nullstellen" sagt. Aber genau genommen ist nur eine Stelle Null, also nur eine Nullstelle. Aber da man die Nullstellen irgendwie unterscheiden können will, sagt man eben, dass sie doppelt ist. ;)


CK_CK - Mo 07.01.08 13:49

Ja, Nullstellen können einen schon zum Grübeln bringen *g*

Naja, ich hab' eine neue Version fertiggestellt:
Version 1.0 RC3
+ Für sämtliche Funktionen existieren jetzt Hotkeys
* Im Vollbildmodus ist nun auch die Leiste mit Zusatzinfos zu sehen
* Fehler in der Druckfunktion behoben
* Die Berechnung des Plots beim Speichern geht schneller

Tretet ruhig mal so richtig dagegen ;)

Chris


Hidden - Mo 07.01.08 18:07
Titel: zoomen
Hi, wie alle sehen könnt ist das mein erster Beitrag :D
Den Plotter finde ich toll, auch wenn ich das schlecht vergleichen kann, da ich noch keinen anderen gesehen habe :roll:

Ich habe das zoomen einfach mal ausprobiert und finde, dass größere Zahlen nichtmehr durchgehend skaliert werden sollten.
Da es aber weiterhin möglich sein soll, auch einen kleinen Bereich heranzuzoomen(bei dem dann ja, sofern er ungünstig getroffen wäre, keine Skalierung mehr vorhanden wäre) schlage ich vor, dass eine konstante Anzahl an Zahlen angezeigt werden sollte.


CK_CK - Mo 07.01.08 18:37

Hi! Erstmal ein herzliches :welcome: im Delphi-Forum!

Ja, du hast Recht. Die Zoomen-Funktion sollte ich noch einmal überarbeiten. Zur Zeit wird nämlich beim Zoom der X-, bzw. Y-Bereich vergrößert/verkleinert und die Schrittweite bleibt konstant.

Vielen Dank auch, dass du das Programm getestet hast ;)

Chris

PS: Wenn du über die nächste Version benachrichtigt werden willst, kannst du unter "Hilfe"->"Update" "Automatisch prüfen" aktivieren... 8)


Hidden - Mo 07.01.08 20:28
Titel: Automatisch prüfen
Habe ich schon gemacht, ist echt praktisch, das entsprechende Fenster geht ja beim Start automatisch auf :D


Hidden - Di 08.01.08 21:07
Titel: zoomen
Ich denke außerdem, dass der durch das Zoomen veränderte Bereich(und die veränderte Schrittweite, wenn das implementiert ist) auch im manuellen Einstellungsblock verändert werden sollten.
Da das nicht ganz offensichtlich ist: Das Bild im Anhang oben ist einfach mal extrem gezoomt, um das Problem zu verdeutlichen; die vielen grauen Striche sind die vielen angezeigten Zahlen in sehr geringem Abstand(Skalierung).
Die neu einsetzenden Striche sind jeweils die Punkte, an denen die Zahl um eine Stelle länger wird, also die Dezimalübergänge.


CK_CK - Di 15.01.08 16:45

So, ich hab' viel Überlegt und bin glaube ich auf ein ganz akzeptables Ergebnis beim Zoomen gekommen ;)

Deswegen gibt's jetzt ein Update:
Version 1.0 RC4
* Zoom-Funktion verbessert
* Funktionseditor verbessert

Viele Grüße,
Chris


Hidden - Di 15.01.08 20:30
Titel: zoomen
Irgendwo versteckt sich noch ein kleiner Fehler :wink:
Der Definitionsbereich scheint sich beim Zoomen zu ändern,
bei der Beispiel-Funktion(Herz) im Anhang besonders gut zu sehen...
Die Definitionsbereiche der Funktion überqueren beim zoomen die Y_Achse :shock:


Heiko - Di 15.01.08 22:00

Hallo,

an sich ist das ein schönes Tool :zustimm: . Aber von der GUI mir leider unsympathisch ;).

Ich fasse mich lieber kurz, als wieder ein 5-seitgigen Artikel zu schreiben, und mache es als Stichpunkte, k? ;)



So, ich hoffe, ich habe dich gerade nicht überrannt. Aber das dürfte fürs erste reichen ;).

Noch nen Vorschlag, alias Featurewunsch: Eine Nette Erweiterung wären Definitionsbereiche bzw. Wertebereiche (wie weit er zeichnen soll). Dann ließen sich auch Ellipsen etc. darstellen ;). Ach, wo wir dabei sind: Vlt. könnteste noch einbauen, dass man Funktionen bennenen kann. Wenn die Bennenung leer ist, zeigt er die Funktion an, sonst die Bennenung. Bei meheren größeren Formeln würde das evtl. die Übersicht länger Bewahren.
Und noch ein Dicker Brocken, der für V1 zuviel wäre: mach doch ein Formelzeichenprogramm. Also dass er die Funktionen nicht nur als (x+2)/2 anzeigt, sondern aus die Eingabe das hier macht:

x+2
---
2

Also wie man es von Latex, Word, OO etc. kennt.

PS: Falls deine ListCheckBox (oder wie die nocheinmal hieß) nicht reicht: Nimm VirtualStringTreeView. Dass ist sehr schnell und Leistungsfähig :).

ich wünsch dir noch viel Spaß beim überdenken meiner Vorschläge :twisted:
Heiko


CK_CK - Di 15.01.08 23:01

Wow, das sind viele Vorschläge :shock:
Da ich die Ideen aber alle gut finde, werde ich nach und nach daran arbeiten. Mal gucken, ob ich dann schon zu Version 2.0 komme ;)

Zur Schrittweite: Die ist für die Skala. Da wird dann alle x Stellen ein Wert angezeigt.

GDI+ ist für stufenloses Scrollen nicht zu langsam. Ich habe nur von Anfang an auf Schrittweites scrollen gesetzt und müsste sehr große Änderungen machen, also werde ich das für Version 2.0 aufheben...

Zum Formelzeichnen: Das ist ein harter Brocken. Mal schauen, ob mir dazu irgendwelche Ideen kommen. Die von Office/Latex/OpenOffice haben sicherlich auch ein wenig dafür gebraucht ;)

Schönen Abend noch,
Chris

Edit: Ups, @hidden. Hab' deinen Post ganz übersehen. Ja, mit dem Zoom läuft's noch nicht so ganz rund. Ich bleibe weiter dran ;)


Hidden - Di 22.01.08 10:59
Titel: plusMinus-Operator
Was hältst du von einem +- - Operator?
y = 5 +- 4
y = Ym +- sqrt(r*r - sqr(X - Xm)) //Kreis

Edit1: komisch... wenn man zwei Funktionen eingibt,
Ym + sqrt(r*r - sqr(X - Xm))
Ym - sqrt(r*r - sqr(X - Xm)),

ergibt sich kein vollständiger Kreis.
Edit2: hat sich erledigt, sah nur durchs zoomen so aus. Sry :D
Edit3: Rechenfehler beseitigt :oops:
Edit4: und die mod-funktion könntest du auch ruhig übernehmen...^^


CK_CK - Di 22.01.08 17:43

Hi!
Das ist eine gute Idee. Wird auch noch mit eingebaut.

Im Moment liege ich aber mit 39° Fieber im Bett. Deswegen dauert's noch etwas, bis ich wieder zum Programmieren komme...

Chris


Kroko - Di 22.01.08 17:59

user profile iconCK_CK hat folgendes geschrieben:
Hi!
Das ist eine gute Idee. Wird auch noch mit eingebaut.

Im Moment liege ich aber mit 39° Fieber im Bett. Deswegen dauert's noch etwas, bis ich wieder zum Programmieren komme...

Chris
Nun hab dich mal nicht so, :lol: