VCSSLによる制御・自動処理
リニアングラフ3Dは、プログラミング言語VCSSLによる制御をサポートしています。 うまく活用すると、連番ファイルを自動処理でプロットさせたり、読み込んだデータを変換(加工)してプロットさせる事などができます。
スポンサーリンク
VCSSLとは?
VCSSLは、データの可視化や計算処理、ちょっとしたツール作成などを行える簡易プログラミング言語です。C言語系のシンプルな文法を採用しており、容易に習得する事ができます。
下記のVCSSL公式サイトで、実行環境やプログラミングガイドなどを無料で入手・利用できます。
プログラムの作成方法
VCSSLはスクリプト言語なので、プログラムは、一般のテキストエディタで書くだけで作成できます。メモ帳などでも一応は可能です。ただ、よりプログラミングに適したエディタもたくさん存在します。
Windowsをご使用の場合、おすすめのエディタは サクラエディタ です。C/C++用の彩色設定を流用すると、VCSSLのプログラムを見やすく色分けできます。また、後述の VCSSLランタイム をPCにインストールしてある状態では、サクラエディタでプログラムを書きながら、Ctrl + B キーの同時押しですぐに実行もできます。
プログラムの実行方法
VCSSLのプログラムを実行するには、通常は実行環境が必要ですが、リニアングラフ3Dには標準で内蔵されています。
具体的には、メニューバーの「プログラム」メニューを開き、VCSSLプログラムを選ぶと実行できます。デフォルトのプログラム選択場所は「RinearnGraph3DProgram」フォルダなので、その中に、よく使うプログラムを入れておくと便利です。
一方で、VCSSLの公式サイトから、単体利用のための実行環境「 VCSSLランタイム 」を入手する事もできます。プログラムを頻繁に自作するような方は、開発中のデバッグの度に、いちいちリニアングラフ3Dのメニューバーから実行するのも面倒なので、VCSSLランタイムをPCにインストールしておいた方が便利かもしれません。
Graph3Dライブラリ
VCSSLからリニアングラフ3Dを制御するには、標準ライブラリの一つである「Graph3D」ライブラリを使用します。
Graph3Dライブラリは、VCSSLで3Dグラフを描くための機能群を提供するものですが、そのグラフ描画画面として、標準でリニアングラフ3Dが採用されています。これは、VCSSLとリニアングラフ3Dの開発元が同じためです。
そのため、特に何もややこしいリンク設定などをしなくても、VCSSLプログラム内でGraph3Dライブラリを使った処理を書くだけで、リニアングラフ3Dが起動して制御できます。
Graph3Dライブラリの細かい仕様は、下記ページから参照できます:
基本的なプログラム例
それでは、実際にGraph3Dライブラリの一部機能を使って、リニアングラフ3Dを色々と制御してみましょう!
リニアングラフ3Dを起動してIDを取得する
まずは出発点として、単にリニアングラフ3Dを起動するだけのコードを見てみましょう:
上記のように、newGraph3D関数をコールするとリニアングラフ3Dが起動します。そして、そのリニアングラフ3Dに識別番号(ID)が割り振られて、戻り値として返されます。この ID は、一つのVCSSLプログラム内で、複数のリニアングラフ3Dを起動して、別々に制御できるようにするためのものです。
すぐ後で扱う setGraph3DFile 関数のように、3Dグラフを制御するための関数は、第一引数としてこの ID を指定するようになっています。「複数あり得る中で、どの3Dグラフに対する制御命令なのか」というのを明確にするためです。
既に起動中のリニアングラフ3DのIDを取得する
なお、newGraph3D 関数の代わりに、getGraph3D 関数を使用する事もできます:
この getGraph3D 関数は、リニアングラフ3Dの「プログラム」メニューからVCSSLプログラムを実行した際に、そのリニアングラフ3Dを制御するための ID を返します。わざわざ新しい3Dグラフ画面を増殖させたくない用途で便利です。
なお、起動中のリニアングラフ3Dが無い場合でも、エラーにはならず、新しくリニアングラフ3Dが起動されます。
データファイルを3Dグラフにプロットする
以下は、座標値データファイル「test.csv」をプロットする、最も単純なプログラムです。
線プロットオプションを設定する
続いて、点プロットオプションを無効にし、線プロットオプションを有効にするプログラムです。
グラフを画像ファイルに出力する
以下は、グラフを画像ファイル「test.png」に出力するプログラムです。
応用的なプログラム例
続いて、少し複雑な、応用的な例をいくつか挙げてみましょう。
連番の座標値データファイルを次々とプロットし、連番の画像ファイルに出力する
以下は、VCSSLプログラムと同じ場所の「test」フォルダの中から、 連番の座標値データファイル「test0.csv」〜「test100.csv」を次々と読み込んでプロットし、 画像ファイル「test0.png」〜「test100.png」に出力していくプログラムです。
なお、exportGraph3D の行をコメントアウトすると、画像を保存せず、単に連番ファイルをアニメーションで描画するためのプログラムになります。
データファイルを読み込み、値を変換してプロットする - 配列使用版
最後に、データ解析では非常によくある、「ファイルから読んだ座標値に、変換をかけつつグラフ化する」という例を扱ってみましょう。
この例と次の例では、ファイル内にタブ文字区切りで、3カラム書式でデータが記載されていると仮定します。つまり、以下のような形です:
x1 y1 z1
x2 y2 z2
x3 y3 z3
...
以下のプログラムは、上記のようなファイルを開き、座標値を全て読み込んで配列に格納しつつ、z値を sin(z) に変換します。そして、変換された座標値を、setGraph3DData 関数に渡して3Dグラフにプロットします。
データファイルを読み込み、値を変換してプロットする - 一時ファイル使用版
上記のプログラムはシンプルですが、ファイルの内容によっては、変換処理をこのように直球的には書けない場合も多々あります。
例えば、「ファイル内に空行やヘッダ行やコメント行などがあって、それらはそのまま維持しないといけない」といったケースなどです。このような場合、一時ファイルを作って、変換結果をそこに書き込み、そしてそれをグラフにプロットするようにすると、比較的簡単です。
以下は、先ほどとほぼ同様のファイル「test.txt」を読み込んで変換・プロットしますが、「ファイル内には空行が含まれており、それらはそのまま保つ」という処理の例です:
上のプログラムを実行すると、変換結果が一時ファイル「test_temp_converted.txt」に書き込まれ、それがグラフにプロットされます。
先ほどの例よりも一気に複雑になりましたね。コメント行やヘッダ行などの、数値ではない文字列の行を含むファイルの変換では、上記よりもさらに複雑な処理をする必要があります。それには、ある程度の文字列操作のプログラミング経験が必要になるかもしれません。
このように、実際のデータ解析・変換の場面では、ファイルの「癖」に合わせて、ケースバイケースで読み込み処理を調整しないといけない場合が多いです。リニアングラフ3DでVCSSLが標準サポートされているのは、そのようなケースに対応するためでもあります。
さらに応用的なプログラム例
VCSSL公式サイトの コードアーカイブ では、色々なプログラムを公開しています。その中には、Graph3Dライブラリを使って、さらに応用的な内容を扱っている例もあります。その内のいくつかをご紹介しましょう。
連番ファイルから3Dグラフをアニメーション描画するツール | |
先ほども登場した、連番ファイルを読み込んで3Dグラフをアニメーション・画像出力するプログラムを、発展させてGUIツールにしたものです。リニアングラフ3Dにも標準で同梱されています。 | |
円形波のアニメーション表示 | |
振幅・波長・周期をスライダーで操作しながら、円形波のグラフをアニメーションで見られるプログラムです。 | |
ローレンツアトラクタ | |
4次精度のルンゲ=クッタ法により、ローレンツ方程式の解曲線を求めてプロットするプログラムです。パラメータをスライダーで操作でき、リアルタイムでグラフが更新されます。 |
他にも、コードアーカイブ では多種多様なプログラムが公開されているため、参考になりそうなものを、ぜひ御気軽に探してみてください!