2012-04-09 2 views
1

Ich versuche, meine Grafik Echtzeit in Gnuplot von meinem C++ - Programm zu plotten.Ich habe gnuplot 4.6 installiert und bin in der Lage, die gnuplot.exe und Plot-Grafiken zu öffnen.Aber ich kann nicht öffnen die Anwendung durch Rohre. Dies ist der Code, den ich benutzt habe.Gnuplot C++ Schnittstelle durch Pipes -cannot öffnen wgnuplot

#include <stdio.h> 
#include <stdlib.h> 

int main() 
{ 
    FILE* gp; 
    char *path = "C:\Program Files\gnuplot\bin\wgnuplot"; 
#ifdef WIN32 
    gp = _popen("gnuplot -persist", "w"); 
#else 
    gp = _popen(path, "w"); 
#endif 

    if (gp == NULL) 
    return -1; 

    fprintf(gp, "set isosample 100\n"); 
    fprintf(gp, "min=-1\n"); 
    fprintf(gp, "max=1\n"); 
    fprintf(gp, "pi=3.141592\n"); 
    fprintf(gp, "set hidden3d\n"); 
    fprintf(gp, "set pm3d\n"); 
    fprintf(gp, "set contour\n"); 
    fprintf(gp, "splot [min:max] [min:max] x*x+2*y*y-0.3*cos(3*pi*x)-0.4*cos(4*pi*y)+0.7\n"); 
    fprintf(gp, "pause -1\n"); 

    return 0; 
} 

Ich habe die Umgebungsvariablen festgelegt und ich bekomme den folgenden Fehler. c: Programm \ wird nicht als interner oder externer Befehl und ausführbares Programm oder Batch-Datei erkannt.

Ich habe versucht, die exe mit dem gleichen Pfad.Aber es wird nicht geöffnet. Ist es wegen der maximalen Länge der Zeichenfolge, die in der cmd-Eingabeaufforderung angegeben werden kann.

Bitte geben Sie Ihre wertvollen Vorschläge.

Dank

+0

Ihr '# ifdef' gibt construct ist bizarr, wenn man bedenkt, dass Sie es so eingerichtet haben, dass es nur dann einen Windows-Nur-Pfad verwendet, wenn * nicht * Windows. – zwol

+0

okay .. Ich habe eine Bibliothek speziell für Windows heruntergeladen und verwendet .. – ShivShambo

+0

@Zack gibt es eine andere nette Bibliothek für diesen Zweck ..? – ShivShambo

Antwort

1

Der Backslash Pfadseparator (durch einen Schrägstrich oder ersetzt) ​​werden entkommen muss:

char *path = "C:\\Program Files\\gnuplot\\bin\\wgnuplot"; 
+0

danke .. jetzt öffnet sich das Gnuplot, aber die Befehle werden nicht darauf geschrieben. Es erscheinen keine Plots. – ShivShambo

1

statt char * Pfad verwenden Sie die _popen Funktion als

gp schreiben sollte = _popen ("E: \\ Myprogramme \\ ProgramFiles \\ Bibliotheken \\ Gnuplot \\ bin \\ gnuplot -persist", "w");

und möglicherweise die entsprechenden Datendatendatei aufrufen über diese Art und Weise

fprintf (gp "splot \" C: \\\\ Benutzer \\\\ Benutzername \\\\ Dokumente \\\\ Visual Studio 2012 \\\\ Projekte \\\\ laplace-Gleichung \\\\ laplace.dat \ "\ n \");

0

Sie könnten gnuplot-cpp zum Zeichnen Ihrer Grafiken verwenden.

Dieses kleine Schnipsel Ihr Problem löst (test1.cpp):

#include "gnuplot_i.hpp" 

int main() 
{ 
    Gnuplot gp; 
    gp.cmd("set isosample 100\n"); 
    gp.cmd("min=-1\n"); 
    gp.cmd("max=1\n"); 
    gp.cmd("pi=3.141592\n"); 
    gp.cmd("set hidden3d\n"); 
    gp.cmd("set pm3d\n"); 
    gp.cmd("set contour\n"); 
    gp.cmd("splot [min:max] [min:max] x*x+2*y*y-0.3*cos(3*pi*x)-0.4*cos(4*pi*y)+0.7\n"); 
    gp.cmd("pause -1\n"); 


    std::cout << std::endl << "Press ENTER to continue..." << std::endl; 
    std::cin.clear(); 
    std::cin.ignore(std::cin.rdbuf()->in_avail()); 
    std::cin.get(); 

    return 0; 
} 

Compile und führen Sie diese Anwendung auf Linux mit

g++ test1.cpp && ./a.out 

Diese The result