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:- Darstellung mehrerer Funktionen gleichzeitig, jede einzeln (de)aktivierbar
- Anpassen der einzelnen Graphen
- Anpassen sämtlicher Farben
- Speichern/Laden der Funktionslisten
- Exportieren des Plots in verschiedene Bildformate (png, gif, jpg, bmp) in beliebiger Größe
- Zoomen mit Mausrad
- Funktionseditor zum einfacheren Bearbeiten der Formel
- Beschriftungen
- Verschiedene Render-Einstellungen
- Kurvendiskussion
- Wertelisten exportieren
Funktionen:- Grundrechenarten (+, -, *, /)
- Potenz (^)
- Betrag: abs(x) oder |x|
- Wurzel: sqrt(x)
- Sinus: sin(x), arcsin(x)
- Kosinus: cos(x), arccos(x)
- Tangens: tan(x), arctan(x)
- Logarithmus (Basis 10): lg(x)
- Logarithmus (Natürlich): ln(x)
- Exponentialfunktion: exp(x) oder e^x
- Zufallszahl (zw. 0 und x): rand(x)
- Konstanten (pi, e, rnd)
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
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:
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:
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:
- Ändernbutton ist aktiv, obwohl kein Element aktiviert
- Gleiches gilt für Löschen
- Funktionenlistview verliert Fokus, wenn man was anderes drückt
- Dateitypenregistrierung für deinen Dateityp
- Öffnen mit Parametern erlauben
- Vielleicht eine Funktion, die den Syntax prüft
- Farbenauswahldialog, anstatt dieser JvColorForm
- Umkehrfunktion bilden könnt auch noch rein
- Beim (zufälligen) Auswählen von Abstand=0 wurde alles rot ==> sollte nicht passieren
- Warum steht da Wertebereich? Das ist doch der Definitionsbereich und der Wertebereich!
- Ausschließen verschiedener Elemente aus dem Definitionsbereich (ähnlich Teilfunktionen)
- Vielleicht wäre auch eine automatisch neue Auswahl einer noch nicht genutzten Farbe gut
- Beim Auswählen der Achsenbeschriftung sollte ab 100 Abstand nur aller 10 möglich sein, oder zumindest empfohlen werden.
- Funktion kopieren wäre auch toll
- Wenn ich eine neue Funktion erstelle, dann wird in der ListView kein Itemindex gesetzt, und der Änder-Button bleibt auch deaktiviert
- Anzeigen des Koordinatenpunktes, wenn die Maus über das Koordinatensystem gleitet
- auch Monotonie am Punkt (x,y)
- oder gleich einen Menüpunkt "Kurvendiskusion" bei einer ausgewählten Funktion
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
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
delfiphan 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...
delfiphan hat folgendes geschrieben: |
Bei steilen Funktionen wird die Linie nicht vollständig bis zum Bildschirmrand gezeichnet. |
Wird ebenfalls verbessert ;)
delfiphan 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...
delfiphan 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)
delfiphan hat folgendes geschrieben: |
Ich habe es nicht geschafft, die Achsen/Hintergrundfarbe zu ändern |
Ich hatte das OnChange-Ereignis vergessen ;) Ist jetzt behoben...
delfiphan 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 =)
delfiphan 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?
delfiphan 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
F34r0fTh3D4rk 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:
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
CK_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
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? ;)
- Bei der Liniendemo erkennt man besonders bei den Zufallspunkten, dass du bei jedem OnPaint alles neuzeicnest, was beim Wechsel mit Strg+Tab zu längeren Wartezeiten führen kann. Besser: Alles auf ein Bitmap zeichnen und das im OnPaint dartstellen. Wenn das Fenster vergößert wird oder an den Kurven sich was ändert, zeichneste dann einfach das Bitmap neu --> sparst CPU
- Die Hintergrundfarben etc. würde in die Optionenpacken und nicht ständig anzeigen. Normalerweise stellt man die sich 1x ein und das reicht für eine Weile. Da sollte er lieber einen größeren Bereich zum zeichnen haben ;).
- Anzeigebereich würde ich direkt dem Zeichenbereich zuordnen, also z.B. auf die Statusleiste davon
- Schrittweite würde ich gar nicht anbieten, sondern immer für jeden Pixel der x-Achse einmal durchgehen. Höhere Genauigkeiten bringen eh nix (maximal durch Antialising, das man irgendwo nen Peak angedeutet sieht, ist aber imho unbedeutend)
- wenn man im Anzeigebereich etwas falsches drin stehen hatte und es danach korrigiert bleibt zuerst ein roter Rahmen übrig bis man ins Feld wieder klickt (kann auch an meinem XP-Theme leigen, aber es sollte ja schließlich mit allem laufen)
- Einstellungsbereich würde ich komplett weglassen und dafür dien AAnzeige rechts breiter machen. Bei Doppelklick editieren und für neu bzw. löschen unter der Liste entsprechende Buttons
- Bei der Funktionsübersicht wäre es praktisch, wenn die Linienart auch noch zu sehen ist. Am besten wäre es: CheckBox, 16*16Bildchen mit Linienart, Kästchen mit der Farbe und dahinter (mit weißem Hintergrund) die Funktion. Bei Klick auf eines der 3 Teile kann man es direkt editieren, also z.B. bei Klick auf das 256px²-Bildchen ne kleine Combobox an der Stelle (aso Dicke vergessen, die auch noch rein)
- Scrollen des Plotts nur Anhand des Rasters möglich. Da wäre stufenlos schöner. Wenn GDI+ da zu langsam ist, guck mal, ob du mit OpenGL klar kommst, dann gehts verschieben noch leichter etc.
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
CK_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:
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2025 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!