
こんにちは、C言語においてグラフを表示することで質問があります。
いま、時間で変化していくある値を(x、y)をfprintfで出力し、datファイルに保存しました。それをwgnuplotで表示すると、きちんと表示することができました。そこで質問なんですが、
時間T=0のときに、X=1、Y=1。 T=1のときに、X=2、Y=2とY=Xの関係で変化していったとすると、直線であらわされますよね?
それを、グラフ上で時間が経過していくと、点として右上に動いて行くように、視覚的に見ることはできるんでしょうか?
いろいろとフリーソフトなどを探したのですが、よくわかりませんでした。。何か知っていたらお願いします。あるいは、C言語では逐次的に表現などできないとか、そういったアドバイスもあればお願いします。
すぐに返信できないかもしれませんが。よろしくお願いします。
No.9
- 回答日時:
Cの開発環境が不明ですが...
PictureBox等に軸線、点を描画する事で自作でも容易に
実現可能の様に思います。
画面上で点が動いている様にみせるには、PictureBoxを
2画面分用意しておいて 1つの画面を表示している間に
もう 1つの画面に移動後の点を描画しておいて画面を切
替える方法や、移動前・移動後の点の位置を個別に消去
・表示するのを全ての点に対して順に行う方法等が有り
ます。
自分で描画を行う場合には、わざわざ外部ファイルに出力
する必要もありません。
この回答への補足
Cの開発環境は、今はVC++を使っています。
ただ、今回の件もあり、今後LINUXを入れてみようと思っています。
また、picturebox という単語は初めて聞きました。パイプというのも初めてでしたが・・・・汗
また、研究内容は、(研究というほどのものでもないですが)
魚を三次元で動かし、群行動をさせることを目標としています。
道は長いみたいです。ありがとうございます。
せっかくなのでpictureboxについても調べてみようと思います。
アドバイスありがとうございます!

No.8
- 回答日時:
議論する気はないんですけど^^;
きっちりとした既存のプログラムが使えればOKでしょう。どうせ作っても、大体は自作のものよりすぐれていますよ(笑)それに、仕事でも、その作業がどれくらいの期間・コストでできるかを見積もるのに、どういうものが使えるのか調べるのがほんとのとこでしょう。すべて自作するコストを受注金額に含ませられるとしたら幸せなことですけどね^^
ところで、意味的には「群行動」のほうがぴったり来るような気がするんですが、学問的には「群行動」じゃなく、「郡行動」が正しいんですか?

No.7
- 回答日時:
ご参考:(サンプルプログラム)
以下のプログラムをコンパイル・リンクして実行ファイル(myprogram.exe という名前だったとします)を作成し、
myprogram | pgnuplot
とコマンドラインで打ち込むと、(0,0)から(9,9)までの y=x のグラフが表示されるます(カレントフォルダとpgnuplot.exeがインストールされているフォルダにパスが通っている仮定して。パスの通し方がわからなければ、カレントフォルダからの相対パスあるいは絶対パスでmyprogramとpgnuplotを指定するといいです)。
・sleep() は経過状況が目で見てわかるように入れているだけです。
・xrange、yrange の設定は、途中で目盛りが変わると見にくいので設定しているだけです。
・グラフ表示させたいデータを一度ファイル(aaa.txt という名前だとします)に保存してから
plot 'aaa.txt'
として描かせる(再描画の場合は replot と出力する)のでもいいですが、このサンプルでは、gnuplot へ与える指示と表示させたいデータもまとめて標準出力に出力しています(なので、こちらは、replot は使わず plot のみ使う)。
===
#include <stdio.h>
#include <unistd.h>
int main(void)
{
struct Point {
float x, y;
} points[] = {
{ 0.0, 0.0 },
{ 1.0, 1.0 },
{ 2.0, 2.0 },
{ 3.0, 3.0 },
{ 4.0, 4.0 },
{ 5.0, 5.0 },
{ 6.0, 6.0 },
{ 7.0, 7.0 },
{ 8.0, 8.0 },
{ 9.0, 9.0 },
};
const int n = sizeof points / sizeof points[0];
int i, j;
puts("set xrange [0:9]");
puts("set yrange [0:9]");
for (i = 0; i < n; ++i) {
puts("plot \'-\' with linespoint");
for (j = 0; j <= i; ++j) printf("%f %f\n", points[j].x, points[j].y);
puts("e");
fflush(stdout);
sleep(2);
}
return 0;
}
この回答への補足
本当に親切にありがとうございます,
いま,あまり深くよんでいないので,また近いうちに熟読してみたいと思います。この掲示板を読んだりしていると,C言語の奥深さに,,
たじたじです。学校の授業のレベルがまだまだだなと感じさせられました。少しがんばってみたいと思います。
本当にありがとうございました。
No.6
- 回答日時:
ANo,3補足
元質問者がどういった事情(趣味、学校の課題、仕事)で
必要としているか判りませんが、少なくとも仕事の場合
であれば、自力(自社内または協力会社を含む)で作成が
可能か否かをまず判断します。
既存の物で利用できる物があるかどうかを探すのはその
後の事になります。
仕事を受けた後になって、「Web検索してみたけれど使え
そうな物がなかったからできません」といった言い訳など
プロの仕事としては通用しません。
....で、どういう事で必要としているのでしょうか?
#趣味、学校の課題、仕事、その他
この回答への補足
私は,今,大学の四年生で,学校の課題というか,研究テーマ(郡知能)を与えられ,それに関する論文をよみ,その論文に書いてある式をもとに,魚の郡行動の動きをC言語で作っているところでした。
魚が動く点を求めることはできたのですが,それを魚が動いてるように見せたいなと思い,今回のような質問をいたしました。
というような感じです。たしかに仕事では通用しない世界とわたしも思います。
ご回答ありがとうございます。
No.5
- 回答日時:
C言語でどういった物が作られているかを知ってさえ
いれば、別に自分が作れる必要はないのですが...
#とりあえず、折れ線グラフの逐次表示であれば以前に
#UNIX C(Motif)を使って作成した事が有ります。
折れ線グラフの表示程度であれば、座標軸とデータの
範囲に応じた目盛やデータの表示位置を計算して出力
すれば良いだけです。
その程度の計算であれば、高校数学の知識ぐらいでも
十分に作成可能です。
グラフ表示用ソフトを探すよりも、グラフ自体を表示
するのに必要な計算式、モジュールを探した方が結果
が出るのが早い様に思います。

No.4
- 回答日時:
自分で、ほんとに探して見つけられなければ、人に聞くのはいいことだと思いますよ。
ほんとは存在するのに存在しないと思って、自分で作ろうとするのは、車輪の再発明で、労力の無駄でしょう(スキルアップのためなら別ですが)。自分で全然探しもしないで人になんでも聞くのはどうかとは思いますけど^^
don_go さんって方は、「C言語を使えば大抵の物が作れる」能力の持ち主なんでしょうけどね(笑)
No.3
- 回答日時:
>フリーソフトなどを探したのですが、よくわかりませんでした。
求めている物がなければ、自分で作れば良いだけです。
>C言語では逐次的に表現などできないとか
C言語を使えば大抵の物は作れます。
#作る人の能力・期間しだいですが...

No.2
- 回答日時:
補足:
gnuplot のインストールフォルダの bin フォルダの下に pgnuplot というのがある(wgnuplot とは違う)ので、それを使えばできるでしょう。
> myprogram | pgnuplot

No.1
- 回答日時:
Windows に Unix のパイプ機能みたいなのがあるんでしたっけ?そういうのがあれば、
% myprogram | gnuplot
Cプログラム(myprogram)の中では、gnuplot へのコマンドを標準術力に出してやるだけでOKですが。。。
…
FILE *fp = fopen("aaa.txt", "w");
fprintf(fp, ...); /* 表示させる数値を書き込む */
fflush(fp);
printf("plot \'aaa.txt\'\n"); /* gnuplot への支持 */
fflush(stdout);
fprintf(fp, ...); /* 追加の数値を書き込む */
fflush(fp);
printf("replot\n");
fflush(stdout);
…
パイプのようなものがなければ(cygwin をインストールしても、Unix 環境を作ってもいいですが(笑))、Cプログラム内で gnuplot と接続するようにプログラムを組んで、上と同様のことをすればいいのではないかと思います。Cから呼べる関数として提供されているグラフアプリケーションがあればもっとやりやすいですけどね。わたしは適当なものを知りません^^;
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
[VB.net] DataGridViewの列ヘッ...
-
Minecraft 統合版(PC)の描画距...
-
word
-
C++にて、塗りつぶされた円を描...
-
VB6,リストボックスの特定行の...
-
TextBoxに文字を書いても表示さ...
-
画面全体を再描画させたい
-
ウインドウ描画のタイミングの...
-
NVIDIAのシェーダーキャッシュ
-
タブをオーナードローすると、...
-
DirectXでの変数の表示について
-
Win32 API 途中から描画がおか...
-
DirectX9.0での四角形の描画に...
-
UpdateData( FALSE); による文...
-
VB.netでのライン描画方法がわ...
-
InvalidateRectの使い方について
-
panelのスクロール表示について
-
グラフィックカードの性能差に...
-
PCで「使用可能な場合はグラフ...
-
C# ラバーバンドの描画を快適に...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
[VB.net] DataGridViewの列ヘッ...
-
Minecraft 統合版(PC)の描画距...
-
TextBoxに文字を書いても表示さ...
-
word
-
VB6,リストボックスの特定行の...
-
MFCでOnPaintのタイミング
-
VBAにGDI+を参照させる方法
-
panelのスクロール表示について
-
google Colabでmatplotlibの描...
-
win32api 画面のちらつき
-
VB.netでのライン描画方法がわ...
-
InvalidateRectの使い方について
-
CStaticコントロールの静的イメ...
-
OneNote 2010 文字と描画がずれる
-
C# ラバーバンドの描画を快適に...
-
UpdateData( FALSE); による文...
-
画面リサイズ時のちらつきをな...
-
NVIDIAのシェーダーキャッシュ
-
vb.netでテキストボックス内の...
-
重いグラフィックス処理
おすすめ情報