私は、Cプログラミングの知識が限られている機械エンジニアです。シミュレーションを行うためにいくつかのコードを作成し、シミュレーション結果を視覚化したいと思います。現時点では、コードの作成にDev-C
を使用しています。 fopen
およびfprintf
コマンドを使用して、結果を含む.dat
ファイルを生成します。次に、GNUPLOT
プログラムを開き、.dat
ファイルをインポートして結果をプロットします。これには時間がかかり、シミュレーションが終了するまで待つ必要があります。プロッターをDev-C
に接続する簡単な方法はありますか。そのため、プロッターはシミュレーション中にデータのプロットを開始しますか?任意のライブラリなど。
すでにgnuplotを知っているので、最も簡単なことは、プログラムからgnuplotを呼び出してデータをパイプすることです。
FILE *gnuplot = popen("gnuplot", "w");
fprintf(gnuplot, "plot '-'\n");
for (i = 0; i < count; i++)
fprintf(gnuplot, "%g %g\n", x[i], y[i]);
fprintf(gnuplot, "e\n");
fflush(gnuplot);
ファイルへの書き込み中の1つの解決策は、ファイルへの書き込み時にsystem()
呼び出しを行い、gnuplotを呼び出すことです。
しかし、それは毎回ファイル名を変更する必要があることを意味しますが、毎回少量のデータを送信しているため、正しく表示されないことを恐れています。
http://www.gnu.org/software/libc/manual/html_node/System-Calls.html
私はgnuplotを使用したことはありませんが、このページ( http://gnuplot-tricks.blogspot.com/ )を見ると、これをうまく機能させるためのコツが見つかるかもしれません。
しかし、自分ですべてをプロットしてgnuplotをスキップしない限り、そのまま待つ必要があるかもしれません。
GnuplotのCインターフェースが役に立つかもしれません:
私は PLPlot をCからのプロットに使用してきましたが、効果的で簡単なことがわかりました。クロスプラットフォーム、オープンソースであり、豊富なプロット機能をサポートしています。開始するには、例を参照することをお勧めします。
私はgnuplotでのリアルタイムプロットに関して他の人々が何をしたかを見るために周りを見回したが、これを見つけた:
http://users.softlab.ntua.gr/~ttsiod/gnuplotStreaming.html
プロットを駆動できる小さなPerlスクリプトがあり、情報をパイプするだけです。
データはファイルに書き込まれているため、tail -f yourdata.dat
そして、それをリアルタイムプロッターにパイプします。
また、stdioファイル呼び出しを使用しているため、定期的にフラッシュする必要があります(fflush
を呼び出して)
明らかに、シミュレーションはバックグラウンドまたは別のシェルで実行されます。そうすれば、シミュレーションを中断することなく、いつでもプロットから抜け出すことができます。
それがあなたの役に立つことを願っています。