TChart: Dreidimensionale Diagramme?
-
- Beiträge: 1224
- Registriert: So 20. Mär 2016, 22:14
- OS, Lazarus, FPC: Win7-64bit Laz1.9.0 FPC3.1.1 für Win, RPi, AVR embedded
- CPU-Target: Raspberry Pi 3
TChart: Dreidimensionale Diagramme?
Ich hab a) noch nicht viel mit TChart gemacht und b) finde auch gerade nichts dazu. Vielleicht suche ich auch an der falschen Stelle.
Kann man in TChart dreidimensionale Diagramme erstellen? Ich brauche quasi "Punktwolken" in X-Y-Z. Es soll eine Visualisierung dieser Art werden: https://de.wikipedia.org/wiki/Spektraltest
Aktuell lese ich die erzeugten Daten in Gnuplot ein, aber es wäre schön, die gleich im Programm darstellen zu können.
Alternativ male ich die auch selbst auf ein Image, aber ich dachte vielleicht kann TChart das ja schon.
Kann man in TChart dreidimensionale Diagramme erstellen? Ich brauche quasi "Punktwolken" in X-Y-Z. Es soll eine Visualisierung dieser Art werden: https://de.wikipedia.org/wiki/Spektraltest
Aktuell lese ich die erzeugten Daten in Gnuplot ein, aber es wäre schön, die gleich im Programm darstellen zu können.
Alternativ male ich die auch selbst auf ein Image, aber ich dachte vielleicht kann TChart das ja schon.
-
- Beiträge: 6918
- Registriert: Do 2. Jan 2014, 17:21
- OS, Lazarus, FPC: Linux (die neusten Trunk)
- CPU-Target: 64Bit
- Wohnort: Schweiz
Re: TChart: Dreidimensionale Diagramme?
Im Falle, wen du es selbst machen musst, kann ich die OpenGL empfehlen, dann musst du dich schon mal nicht um den Z-Puffer kümmern.
Mit Lazarus sehe ich grün
Mit Java und C/C++ sehe ich rot
Mit Java und C/C++ sehe ich rot
Re: TChart: Dreidimensionale Diagramme?
Allgemeines zu TAChart: Ich kopiere nur den folgenden Link herein, in dem du zu Links zu weiteren Artikeln findest: http://wiki.lazarus.freepascal.org/TAChart
Zum Thema 3D: Nein, TAChart kann kein echtes 3D, höchstens TColorMapSeries mit entsprechend dem z-Wert colorierten Punkten, und ein pseudo-3D mit in die Tiefe extrudierten Strukturen der Standard-Plots. Ersteres läuft gut (siehe das entsprechende Tutorial im obigen Link), letzteres möchte ich eigentlich aber niemandem empfehlen und trifft auf deine Frage ohnehin nicht zu.
Ich würde an deiner Stelle bei gnuplot bleiben, aber das Programm in einem eigenen Prozess starten und damit den Plot erzeugen und in eine temporäre Datei schreiben lassen. Diese würde ich in ein TImage einlesen und so im eigenen Programm anzeigen. Siehe auch http://www.lazarusforum.de/viewtopic.php?f=11&t=7139 und angehängtes lauffähiges Mini-Projekt.
Zum Thema 3D: Nein, TAChart kann kein echtes 3D, höchstens TColorMapSeries mit entsprechend dem z-Wert colorierten Punkten, und ein pseudo-3D mit in die Tiefe extrudierten Strukturen der Standard-Plots. Ersteres läuft gut (siehe das entsprechende Tutorial im obigen Link), letzteres möchte ich eigentlich aber niemandem empfehlen und trifft auf deine Frage ohnehin nicht zu.
Ich würde an deiner Stelle bei gnuplot bleiben, aber das Programm in einem eigenen Prozess starten und damit den Plot erzeugen und in eine temporäre Datei schreiben lassen. Diese würde ich in ein TImage einlesen und so im eigenen Programm anzeigen. Siehe auch http://www.lazarusforum.de/viewtopic.php?f=11&t=7139 und angehängtes lauffähiges Mini-Projekt.
- Dateianhänge
-
gnuplotter3D.zip
- (6.96 KiB) 85-mal heruntergeladen
Zuletzt geändert von wp_xyz am Fr 24. Aug 2018, 00:31, insgesamt 1-mal geändert.
-
- Beiträge: 6918
- Registriert: Do 2. Jan 2014, 17:21
- OS, Lazarus, FPC: Linux (die neusten Trunk)
- CPU-Target: 64Bit
- Wohnort: Schweiz
Re: TChart: Dreidimensionale Diagramme?
Etwas ist mit dem Link faul, er hat die gleiche Funktion, wie wen ich auf Antworten klicke.Allgemeines zu TAChart: Ich kopiere nur den folgenden Link herein, in dem du zu Links zu weiteren Artikeln findest: posting.php?mode=reply&f=18&t=11741
Mit Lazarus sehe ich grün
Mit Java und C/C++ sehe ich rot
Mit Java und C/C++ sehe ich rot
-
- Beiträge: 6918
- Registriert: Do 2. Jan 2014, 17:21
- OS, Lazarus, FPC: Linux (die neusten Trunk)
- CPU-Target: 64Bit
- Wohnort: Schweiz
Re: TChart: Dreidimensionale Diagramme?
Ich habe das Programm gerade ausprobiert, das sieht mehr als nur nach einem Plotter aus.Ich würde an deiner Stelle bei gnuplot bleiben,
Dies ist ja schon fast wie Mathematica, welches ich mal vor 20Jahren probiert hatte.
So nebenbei kann man es unter Linux sehr bequem mit
Code: Alles auswählen
suda apt-get install gnuplot
Aber das Demo von wpx habe ich nicht zum laufen gebraucht, irgendwie Windowslastig.
Mit Lazarus sehe ich grün
Mit Java und C/C++ sehe ich rot
Mit Java und C/C++ sehe ich rot
Re: TChart: Dreidimensionale Diagramme?
Ich habe jetzt auf die Schnelle nichts gesehen, was Windows voraussetzen würde. Hast du den Pfad zu gnuplot angepasst? (Zur Vereinfachung in GnuPlotSettings für mein System hart-kodiert, unit gpMain).
-
- Beiträge: 6918
- Registriert: Do 2. Jan 2014, 17:21
- OS, Lazarus, FPC: Linux (die neusten Trunk)
- CPU-Target: 64Bit
- Wohnort: Schweiz
Re: TChart: Dreidimensionale Diagramme?
Habe ich:Ich habe jetzt auf die Schnelle nichts gesehen, was Windows voraussetzen würde. Hast du den Pfad zu gnuplot angepasst?
Code: Alles auswählen
PathToExe: '/usr/bin/gnuplot'; // path to gnuplot.exe
Mit Lazarus sehe ich grün
Mit Java und C/C++ sehe ich rot
Mit Java und C/C++ sehe ich rot
Re: TChart: Dreidimensionale Diagramme?
Achso - der übliche Unix-Threads-Fehler: in der Projekt-Datei (.lpr) das {$IFDEF UseCThreads} herauslöschen oder ein Define {$DEFINE UseCThreads} setzen.Mathias hat geschrieben:Habe ich:Ich habe jetzt auf die Schnelle nichts gesehen, was Windows voraussetzen würde. Hast du den Pfad zu gnuplot angepasst?wird dann aber bei "Execute" mit RunError 232 quttiert.Code: Alles auswählen
PathToExe: '/usr/bin/gnuplot'; // path to gnuplot.exe
Code: Alles auswählen
uses
{$IFDEF UNIX}
cthreads,
{$ENDIF}
Interfaces, // this includes the LCL widgetset
Forms, gpMain
{ you can add units after this };
-
- Beiträge: 1224
- Registriert: So 20. Mär 2016, 22:14
- OS, Lazarus, FPC: Win7-64bit Laz1.9.0 FPC3.1.1 für Win, RPi, AVR embedded
- CPU-Target: Raspberry Pi 3
Re: TChart: Dreidimensionale Diagramme?
Macht mal keinen Stress, ich male das jetzt selbst auf ein TImage, nachdem ich endlich Canvas.Pixels gefunden habe geht das auch ganz nett.
Erste Erkenntnis: LFSR sind sowas von mies...
Erste Erkenntnis: LFSR sind sowas von mies...
-
- Beiträge: 6918
- Registriert: Do 2. Jan 2014, 17:21
- OS, Lazarus, FPC: Linux (die neusten Trunk)
- CPU-Target: 64Bit
- Wohnort: Schweiz
Re: TChart: Dreidimensionale Diagramme?
Canvas.Pixels ist etwa das gemühtlichste was es an Grafikausgabe gibt.
Mit Lazarus sehe ich grün
Mit Java und C/C++ sehe ich rot
Mit Java und C/C++ sehe ich rot
-
- Beiträge: 1224
- Registriert: So 20. Mär 2016, 22:14
- OS, Lazarus, FPC: Win7-64bit Laz1.9.0 FPC3.1.1 für Win, RPi, AVR embedded
- CPU-Target: Raspberry Pi 3
Re: TChart: Dreidimensionale Diagramme?
Das ist in dem Fall egal. Der AVR liefert Zufallswerte per Uart, die dann auf Histogramm und Spektraltest untersucht werden. Da ist der Flaschenhals nicht die Grafikausgabe.Mathias hat geschrieben:Canvas.Pixels ist etwa das gemühtlichste was es an Grafikausgabe gibt.
-
- Beiträge: 6918
- Registriert: Do 2. Jan 2014, 17:21
- OS, Lazarus, FPC: Linux (die neusten Trunk)
- CPU-Target: 64Bit
- Wohnort: Schweiz
Re: TChart: Dreidimensionale Diagramme?
Bist du gerade an einem optimierten Zufallsgenerator für den AVR entwickeln ?Der AVR liefert Zufallswerte per Uart,
Was machst du mit dem Z-Wert ?
Mit Lazarus sehe ich grün
Mit Java und C/C++ sehe ich rot
Mit Java und C/C++ sehe ich rot
Re: TChart: Dreidimensionale Diagramme?
Kann aber noch kommen. Bei den Zufallszahlen des randu-Generators, den du eingangs zitiert hast, sind ja die Zufallszahlen in Ebenen angeorndet. Nur sieht man diese bei einem beliebigen Betrachtungswinkel nicht. Daher erscheint es mir wichtig, dann man den Blickpunkt auf die Punktwolke interaktiv verändern kann. Und da geht dem LCL-Canvas mit Pixels[] schnell die Luft aus (meine statische gnuplot-Anwendung versagt da natürlich völlig), während das für OpenGL kein Problem darstellt.
Im Anhang findest du ein kleines OpenGL-Programm, das jeweils drei randu-Zufallszahlen als Pixel in den OpenGL-3D-Raum zeichnet. Das wird für 10.000 Zufallspunkte gemacht. Mit Hilfe einer Camara-Routine, die Mathias hier einmal gepostet hat, kann man mit der rechten Maustaste das Bild rotieren (mit der linken verschieben und mit dem Mausrad zoomen). Anfänglich sieht man nur eine beliebige Punktwolke, aber wenn man die Maus mit gedrückter rechtet Taste ein bisschen nach unten verschiebt, wird die Schichtung der Werte sehr deutlich.
Programmiertechnisch passiert die Datenerzeugung - also der Teil, der dich direkt betrifft - in dieser kleinen Routine (im OnPaint-Ereignis des TOpenGLControl)
Im Anhang findest du ein kleines OpenGL-Programm, das jeweils drei randu-Zufallszahlen als Pixel in den OpenGL-3D-Raum zeichnet. Das wird für 10.000 Zufallspunkte gemacht. Mit Hilfe einer Camara-Routine, die Mathias hier einmal gepostet hat, kann man mit der rechten Maustaste das Bild rotieren (mit der linken verschieben und mit dem Mausrad zoomen). Anfänglich sieht man nur eine beliebige Punktwolke, aber wenn man die Maus mit gedrückter rechtet Taste ein bisschen nach unten verschiebt, wird die Schichtung der Werte sehr deutlich.
Programmiertechnisch passiert die Datenerzeugung - also der Teil, der dich direkt betrifft - in dieser kleinen Routine (im OnPaint-Ereignis des TOpenGLControl)
Code: Alles auswählen
for i := 0 to N do begin
x := randu; // Zufallszahl mit der "randu"-Funktion erzeugen (http://physics.ucsc.edu/~peter/115/randu.pdf)
y := randu;
z := randu;
glBegin(GL_POINTS);
glColor3f(1,1,1); // Farbe R=1.0, G=1.0, B=1.0 --> weiß
glVertex3f(x, y, z); // "PutPixel" sozusagen
glEnd();
end;
- Dateianhänge
-
plot_randu.zip
- (3.35 KiB) 72-mal heruntergeladen
-
- Beiträge: 6918
- Registriert: Do 2. Jan 2014, 17:21
- OS, Lazarus, FPC: Linux (die neusten Trunk)
- CPU-Target: 64Bit
- Wohnort: Schweiz
Re: TChart: Dreidimensionale Diagramme?
Warnung, das Beispiel von wp_xyz läuft nicht mit Lazarus 1.9 und Linux.
Dank dieses Bugs hier: http://www.lazarusforum.de/viewtopic.ph ... gl#p104914
Dank dieses Bugs hier: http://www.lazarusforum.de/viewtopic.ph ... gl#p104914
Bei so vielen Punkten würde ich die ganzen Daten direkt in ein Vertexbuffer schreiben, anstelle bei jedem Paint jeden Pixel neu laden.Im Anhang findest du ein kleines OpenGL-Programm, das jeweils drei randu-Zufallszahlen als Pixel in den OpenGL-3D-Raum zeichnet. Das wird für 10.000 Zufallspunkte gemacht.
Der Random ist etwas komisch, siehe Anhang.Programmiertechnisch passiert die Datenerzeugung - also der Teil, der dich direkt betrifft
- Dateianhänge
-
- Bildschirmfoto vom 2018-08-25 17-38-32.png (11.17 KiB) 2495 mal betrachtet
Mit Lazarus sehe ich grün
Mit Java und C/C++ sehe ich rot
Mit Java und C/C++ sehe ich rot