グラフ描画
仕事では、実験屋といえども、
時には実験装置の設計や実験結果の考察のために、
数値計算をしたりもします。
(もともとそっちの方が好きだったりするのですが・・・)
C++が好きなので、C++で計算させて、結果をテキスト形式で出力して、
Wave Metrics社の「Igor Pro」というグラフソフトで表示する。
ということをやっていたのですが、
いちいち、結果をソフトに持っていくのがめんどくさい!
というわけで、実は、このIgor Proというソフトは、単なるグラフ描画ソフトではなく、
数値解析ソフトで、統計解析から微分・積分・フーリエ変換・行列計算など
かなりいろんな数学的計算が可能なので、内部でプログラミングもできるので、
最近は、このソフトの内部でプログラミングをして計算していました。
ところが、このプログラミング言語が問題で、
いまいち、というかかなり使いにくいのです!
特に、C++に慣れてしまった人間にとっては、
オブジェクト指向に対応してないと、かなりきついです。
それどころか、参照渡しができなかったり、
グローバルな名前の衝突を気にしなければいけなかったり・・・とか、
まあ、数え上げたらきりがないのですが(笑)
う~ん、数値解析機能としては申し分ないんですけど、
もったいない限りです。
というわけで、前置きが長くなりましたが・・・
C++からアクセスできるグラフ描画ライブラリが
欲しいなと思っているわけです。
そうすれば、計算しながらリアルタイムで表示できますからね。
自作するのも面白いなあと思っているのですが、
(実際に以前に、VisualC++のMFCを使って作りかけていた残骸があるのですが)
とりあえず、既存のものでないか探してみたら、NPlotなるものがあるようですね。
で、さっそく、このライブラリをダウンロードして、
参考文献[1]のブログ記事を参考にさせていただきながら、
.NET CLRのWindowsフォームアプリで記述してみたら、
こんな感じにうまくいきました。

とりあえず、これを使うのも一案ですね!
プログラムは、参考文献のものとほとんど同じですが、
MainFormのコンストラクターのところに、
以下の数行を書き込んだだけです。
----------------------------------------------
ArrayList^ data = gcnew ArrayList();
data->Add(1);
data->Add(5);
data->Add(3);
data->Add(-2);
data->Add(0.5);
NPlot::LinePlot^ lp = gcnew NPlot::LinePlot(data);
this->plotSurface2D1->Add(lp);
this->plotSurface2D1->Refresh();
------------------------------------------------------
ちょっとプログラミング熱が上がってるので、
自分用にカスタマイズしたものを自作するのも楽しそうですね。
「プログラミング」というカテゴリを作ったので、
引き続き、進捗状況を報告していきます。
参考文献
[1] ひよっこ女性SEの記録
「フリーのライブラリNplotを使ってグラフを描く」
http://ameblo.jp/se-natsu/entry-10151086471.html
時には実験装置の設計や実験結果の考察のために、
数値計算をしたりもします。
(もともとそっちの方が好きだったりするのですが・・・)
C++が好きなので、C++で計算させて、結果をテキスト形式で出力して、
Wave Metrics社の「Igor Pro」というグラフソフトで表示する。
ということをやっていたのですが、
いちいち、結果をソフトに持っていくのがめんどくさい!
というわけで、実は、このIgor Proというソフトは、単なるグラフ描画ソフトではなく、
数値解析ソフトで、統計解析から微分・積分・フーリエ変換・行列計算など
かなりいろんな数学的計算が可能なので、内部でプログラミングもできるので、
最近は、このソフトの内部でプログラミングをして計算していました。
ところが、このプログラミング言語が問題で、
いまいち、というかかなり使いにくいのです!
特に、C++に慣れてしまった人間にとっては、
オブジェクト指向に対応してないと、かなりきついです。
それどころか、参照渡しができなかったり、
グローバルな名前の衝突を気にしなければいけなかったり・・・とか、
まあ、数え上げたらきりがないのですが(笑)
う~ん、数値解析機能としては申し分ないんですけど、
もったいない限りです。
というわけで、前置きが長くなりましたが・・・
C++からアクセスできるグラフ描画ライブラリが
欲しいなと思っているわけです。
そうすれば、計算しながらリアルタイムで表示できますからね。
自作するのも面白いなあと思っているのですが、
(実際に以前に、VisualC++のMFCを使って作りかけていた残骸があるのですが)
とりあえず、既存のものでないか探してみたら、NPlotなるものがあるようですね。
で、さっそく、このライブラリをダウンロードして、
参考文献[1]のブログ記事を参考にさせていただきながら、
.NET CLRのWindowsフォームアプリで記述してみたら、
こんな感じにうまくいきました。

とりあえず、これを使うのも一案ですね!
プログラムは、参考文献のものとほとんど同じですが、
MainFormのコンストラクターのところに、
以下の数行を書き込んだだけです。
----------------------------------------------
ArrayList^ data = gcnew ArrayList();
data->Add(1);
data->Add(5);
data->Add(3);
data->Add(-2);
data->Add(0.5);
NPlot::LinePlot^ lp = gcnew NPlot::LinePlot(data);
this->plotSurface2D1->Add(lp);
this->plotSurface2D1->Refresh();
------------------------------------------------------
ちょっとプログラミング熱が上がってるので、
自分用にカスタマイズしたものを自作するのも楽しそうですね。
「プログラミング」というカテゴリを作ったので、
引き続き、進捗状況を報告していきます。
参考文献
[1] ひよっこ女性SEの記録
「フリーのライブラリNplotを使ってグラフを描く」
http://ameblo.jp/se-natsu/entry-10151086471.html
スポンサーサイト
単に自分用の知識整理のような自己満足なブログですが(笑)、
お読みいただいているのは、すごく励みになります。
例の件も楽しみにしておりますね。
これからもよろしくお願いします^^