plotten von 2d array in c



  • Servus,

    ich wollte diskutieren, was es schon für Möglichkeiten gibt. Beschäftigt habe ich mich mit

    plplot, opengl und andere Bibliotheken.

    Ich habe auch schon was von Python gelesen. Kann man auch Octave-funktionen zum plotten nutzen? Leider finde ich keine richtigen Tutorials zu plplot und opengl ist nehme ich an viel zu kompliziert. Hat jemand einen Rat?

    Liebe Grüße,

    Inge



  • Was willst du denn Plotten, was ist in deinem Array drin?



  • Oh Entschuldigung, das habe ich vergessen,

    Es ist ein 2d Array mit n Mal m double Variablen, was wiederum in Float umgewandelt werden kann. Ich brauche sowas wie einen Oberflächen-plot, ähnlich wie die Befehle mesh,surf, oder images und contour bei Matlab. Ich hoffe das hilft weiter.

    Liebe Grüße,

    Inge



  • Für die PLplot Bibliothek gibt es jede Menge Bespiele im Ordner examples, hast du die schon ausprobiert?
    In Sachen Oberflächen sehen ansonsten noch die folgenden Bibliotheken vielversprechend aus:
    Die GSL http://www.gnu.org/software/gsl/ Bibliothek, sie wird u.a. von LabPlot http://labplot.sourceforge.net/ benutzt.
    Die DISLIN Bibliothek http://www.mps.mpg.de/dislin/overview.html, frei erhältlich für nichtkommerzielle Zwecke.
    Für gnuplot gibt es eine ANSI C Schnittstelle http://ndevilla.free.fr/gnuplot/

    Vielleicht ist etwas für dich dabei. Gearbeitet habe ich bisher allerdings mit keiner, sodass ich dir keine weiteren, konkreten Tipps geben kann.

    Gruß,
    B.B.



  • Servus B.B.

    ja ich habe diese Beispiele schon angeschaut, aber ich komme nicht mit der Anwendung zurecht. Bei der Compilierung erhalte ich Anfragen über fehlende Funktionen.

    inge@linux-98ak:~/Programme/plplot/plplot-5.9.4/examples/c> gcc tutor.c -I/usr/local/include/plplot -I/home/inge/Programme/plplot/plplot-5.9.4/examples/c -Lplcdemos.h
    tutor.c: In function ‘main’:
    tutor.c:85: warning: passing argument 2 of ‘c_plparseopts’ from incompatible pointer type
    /usr/local/include/plplot/plplot.h:1810: note: expected ‘const char **’ but argument is of type ‘char **’
    /tmp/ccpMDBsF.o: In function `main':
    tutor.c: (.text+0x23)  : undefined reference to `c_plparseopts'
    tutor.c: (.text+0x297) : undefined reference to `c_plsori'
    tutor.c: (.text+0x29c) : undefined reference to `c_plinit'
    tutor.c: (.text+0x2a8) : undefined reference to `c_pladv'
    tutor.c: (.text+0x2d4) : undefined reference to `c_plvpor'
    tutor.c: (.text+0x534) : undefined reference to `c_plwind'
    tutor.c: (.text+0x564) : undefined reference to `c_plbox'
    tutor.c: (.text+0x580) : undefined reference to `c_pllab'
    tutor.c: (.text+0x5cc) : undefined reference to `c_plpoin'
    tutor.c: (.text+0x5fd) : undefined reference to `c_plline'
    tutor.c: (.text+0x7f5) : undefined reference to `c_plmtex'
    tutor.c: (.text+0x820) : undefined reference to `c_pladv'
    tutor.c: (.text+0x825) : undefined reference to `c_plend'
    collect2: ld returned 1 exit status
    

    Ich hatte plplot eigentlich mit cmake installiert, dennoch habe ich keine Ahnung was das Problem ist.
    Egal. Ich habe mir auch andere Sachen angeschaut. Die DISLIN Bibliothek scheint das zu sein was ich suche. Ich habe aber Suse 11.2 und bis 11.1 wird es nur untersützt. Zumindest gehe ich davon aus dass es so ist, da ich weder über die tar.gz und die rpm Files dislin installieren kann, warum auch immer. Immer fehlt irgendein File libxm.so.4 wobei ich die libxm files besitze. Weiterhin habe ich es mit gnuplot versucht, aber nirgendwo ein vernünftiges Tutorial gefunden. Egal ich versuche es mit der ANSI Schnittstelle. Mal schauen was dabei so rauskommt.

    Dennoch vielen Dank für die Hilfe B.B.

    Liebe Grüße

    Inge



  • das -L Parameter ist der zusätzliche Pfad, wo der Linker nach shared und static libraries sucht, nicht den Pfad einer Header Datei, damit kann der Linker nämlich nichts anfangen. Außerdem muss du dem Linker mit dem -l Parameter bekannt machen, wie die Bibliothek heißt, gegen du linken willst, -llibname noch hinzufügen.



  • Danke Tux für den Tipp,
    anscheinend fehlt mir dennoch was. Ich habe eine Datei tutor.c, die den Header plcdemos.h braucht, der wiederum plplot.h und plConfig.h beinhaltet, die ich mit dem ersten -I finde. Der zweite Pfad sucht im Ordner vom plcdemos header. Dennoch haut es mir folgende Meldung raus

    inge@linux-98ak:~/Programme/plplot/plplot-5.9.4/examples/c> gcc tutor.c -I/usr/local/include/plplot -I/home/peter/Programme/plplot/plplot-5.9.4/examples/c
    
    tutor.c:85: warning: passing argument 2 of ‘c_plparseopts’ from incompatible pointer type
    /usr/local/include/plplot/plplot.h:1810: note: expected ‘const char **’ but argument is of type ‘char **’
    /tmp/ccPMgO6f.o: In function `main':
    tutor.c: (.text+0x23): undefined reference to `c_plparseopts'
    tutor.c: (.text+0x297): undefined reference to `c_plsori'
    tutor.c: (.text+0x29c): undefined reference to `c_plinit'
    tutor.c: (.text+0x2a8): undefined reference to `c_pladv'
    tutor.c: (.text+0x2d4): undefined reference to `c_plvpor'
    tutor.c: (.text+0x534): undefined reference to `c_plwind'
    tutor.c: (.text+0x564): undefined reference to `c_plbox'
    tutor.c: (.text+0x580): undefined reference to `c_pllab'
    tutor.c: (.text+0x5cc): undefined reference to `c_plpoin'
    tutor.c: (.text+0x5fd): undefined reference to `c_plline'
    tutor.c: (.text+0x7f5): undefined reference to `c_plmtex'
    tutor.c: (.text+0x820): undefined reference to `c_pladv'
    tutor.c: (.text+0x825): undefined reference to `c_plend'
    collect2: ld returned 1 exit status
    

    Ich versteh das absolut nicht. Hat jemand eine Idee?

    Liebe Grüße,

    Inge



  • lies dir meinen Beitrag nochmal durch. Du brauchst die -L und -l Parameter, damit der Linker weiß, gegen welche Bibliothek er linken soll. Geht es um diese Bibliothek? http://plplot.sourceforge.net



  • Du kannst so kompilieren:

    $ gcc `pkg-config --cflags --libs plplotd` prog.c -o prog
    

    Siehe http://www.miscdebris.net/plplot_wiki/index.php?title=Using_PLplot



  • Hallo Tux,

    Ja genau es ist die Bibliothek, dennoch bin ich absolut verwirrt.

    Ich muss irgendwie den pkg_config_path setzen. Ist das immer so umständlich ;)?

    Egal, ich beiß mich jetzt fest und mach wieder ein kleines tutorial dazu oder setze vereinfachende Fkts dazu. Nur dazu muss ich erst einmal damit arbeoten können.

    Nu guti, ich hör erstmal auf zu testen.

    Nacht,

    Inge



  • umständlich wäre es ohne. Da diese Bib von mehreren Bibs abhängt und diese auch mitlinken musst, müsstest du eine Origie von -L und -l Optionen selber angeben. Beim nächsten Update hat sich da was geändert und musst dann wieder per Hand selber alles ändern. pkg-config ist genau dafür da, dass pkg-config --libs bib stets die richtigen -L und -l Parameter auspuckt.



  • Ich habe vll die Bib falsch installiert, denn der pk_config funzt net. Ich denke, dass ich die Bib vll falsch installiert habe. Im Manual steht
    folgender Hinweis:

    cmake -DCMAKE_INSTALL_PREFIX= <install-prefix> \    
    <Pfad> >& cmake.out                                 // ist mit prefix           
                                                        // ein Zielordner         
                                                        // oder ein Buchstabe 
                                                        // gemeint?
    ctest  >& ctest.out                                 
    make install >& make_install.out
    
    cd <install-prefix>/share/plplot-5.9.5/examples/
    make >& make_examples.out                           // make der examples?
    
    ./plplot-test.sh >& plplot-test.sh.out              // ?? erstellung der lib?
    

    Kann mir hier jemand helfen oder ein gutes tut dafür zeigen?

    Lg Inge



  • Mach einfach:

    $ cmake -DCMAKE_INSTALL_PREFIX=/usr
    $ make
    $ make install
    

    danach kannst du folgendes eingeben:

    $ pkg-config --cflags --libs plplotd
    

    wenn da was vernünftiges kommt (also kein Fehler), dann ist die Bibliothek installieren. Lies die Sachen einfach aufmerksamer.

    BTW: hast du schon nachgeschaut, ob deine Distribution dieses Paket mitliefert? Wenn ja, dann verwende das Paket deiner Distribution.



  • Danke Tux,

    jetzt laufen die Beispiele.
    Liebe Grüße,

    Inge



  • Servus!!!

    Ich hätte mal eine kleine Frage. Und zwar würde mich interessieren, wie ich das Outputfile festlegen kann. In der Dokumentation gibt es einen Hinweis auf plgfile(FILE* output);

    Nun habe ich ein Problem. Ich bin mal wieder verwirrt. Ausgangsposition ist, dass ich den Filenamen in der ebengenannten Funktion eingeben soll. Muss man da nicht vorher erst über fopen den File öffnen? Oder erstellt der sich von allein. Wenn ich einen File mit

    FILE* Bsp;

    initialisiere und mit fopen öffne, wird das nichts (logischerweise wird er mit fclose geschlossen). Auch nur ein initialisierter File reicht nicht aus. Hat dies schon einmal jemand gemacht?

    Lg Inge



  • #include <stdio.h>
    void plgfile(FILE* output); 
    
    FILE*   stream;
    int main(void)
    {
    	stream = fopen("c:/outfile", "w");// Erstellt ein leere  Datei (c:/outfile) zum Hineinschreiben
    	// Dein Funktionsaufruf würde lauten:
    	plgfile(stream); // !
    
    	fclose(stream);
    	return 0;
    }
    

    Hoffe dies hilft Dir!

    mfg Egon



  • Nee mit pfad leider auch nicht. Ich erhalte trotz richtiger Kompilierung bei der Ausgabe einen Speicherzugriffsfehler. Es ist auch Mist das die Dokumentation so unvollständig ist.

    Trotzdem vielen Dank,

    Inge


Anmelden zum Antworten