[ 前へ | 目次 | 次へ ]

VCSSLによる制御・自動処理

リニアングラフ2Dは、プログラミング言語VCSSLによる制御をサポートしています。 うまく活用すると、連番ファイルを自動処理でプロットさせたり、読み込んだデータを変換(加工)してプロットさせる事などができます。

VCSSLについて

VCSSLは、日常計算から3次元コンピューターグラフィックスまでを幅広くカバーするプログラミング言語です。C言語系のシンプルな文法を採用しており、容易に習得する事ができます。

プログラミング言語 VCSSL 公式サイト
https://www.vcssl.org/ja-jp/
ダウンロードページ
https://www.vcssl.org/ja-jp/download/

VCSSLのランタイムは、リニアングラフ2Dに同梱されており、リニアングラフ2Dの「 プログラム / Program 」メニューから手軽に利用する事ができます。

プログラムの作成と実行

VCSSLはスクリプト言語なので、プログラムは一般のテキストエディタで記述し、拡張子「.vcssl」を付けて保存するだけで作成できます。 作ったプログラムは、リニアングラフ2Dのメニューバーにある、「 プログラム / Program 」 メニューから選択実行できます。

なお、便利なプログラムを作成した場合、「 RinearnGraph2DProgram 」フォルダに入れておくと、 「 プログラム / Program 」メニューに表示され、すぐに実行できるようになります。

Graph2D API について

VCSSLからリニアングラフ2Dを制御するには、tool.Graph2D APIを使用します。 ここではGraph2D APIの一部の機能のみを使用します。全機能を参照するには、下記URLをご参照ください。

tool.Graph2D API 詳細仕様
https://www.vcssl.org/ja-jp/lib/tool/Graph2D

プログラム例

ファイルをプロットする

以下は座標値データファイル「 test.tsv 」をプロットする、最も単純なプログラムです。 なお、「//」で始まる行はコメントであり、処理の際には読み飛ばされます。


//リニアングラフ2Dを制御するライブラリをインポート
import tool.Graph2D;

//リニアングラフ2Dを起動( x位置, y位置, 幅, 高さ, タイトル )
int graph = newGraph2D( 0, 0, 700, 700, "Graph" ) ;

//座標値データファイル「 test.tsv 」をプロットする
setGraph2DFile( graph, "test.tsv" );
code/Launch.vcssl

線プロットオプションを設定する

続いて、点プロットオプションを無効にし、線プロットオプションのみを有効にするプログラムです。


import tool.Graph2D;

int graph = newGraph2D( 0, 0, 700, 700, "Graph" ) ;
setGraph2DFile( graph, "test.tsv" );

//点プロットを無効にする
setGraph2DOption( graph, "WITH_POINTS", false );

//線プロットを有効にする
setGraph2DOption( graph, "WITH_LINES", true );
code/Option.vcssl

グラフを画像ファイルに出力する

以下はグラフを画像ファイル「test.png」に出力するプログラムです。


import tool.Graph2D;

int graph = newGraph2D( 0, 0, 700, 700, "Graph" ) ;

setGraph2DFile( graph, "test.tsv" );

//グラフを画像ファイル「 test.png 」に出力( グラフID, 画像ファイル名, 画像形式 )
exportGraph2D( graph, "test.png", "PNG" );
code/Export.vcssl

連番の座標値データファイルを次々とプロットし、連番の画像ファイルに出力する

続いて応用です。VCSSLプログラムから見て「test」フォルダの中にある、連番の座標値データファイル「test0.tsv」〜「test100.tsv」を次々とプロットし、 画像ファイル「test0.png」〜「test100.png」に出力していくプログラムです。


import tool.Graph2D;

int graph = newGraph2D( 0, 0, 700, 700, "Graph" ) ;

//変数iを1から100まで変更しながらループ
for( int i=0; i<=100; i++ ){

  setGraph2DFile( graph, "./test/test"+i+".tsv" );
  exportGraph2D( graph, "./test/test" + i + ".png", "PNG" );

  //100ミリ秒スリープ(アニメーションウェイト)
  sleep( 100 );

}
code/Serial.vcssl

座標値データファイルを読み込み、値を変換してプロットする

最後に、座標値データファイル「test.tsv」を読み込み、Y値をsin( Y値 )に変換した上でプロットするプログラムです。最初に、「test.tsv」が空白改行を含む場合を扱います。


import tool.Graph2D;
import Math;

// 座標値データファイル「test.tsv」を、TSV形式の読み込みモードで開く
int file = open( "test.tsv", READ_TSV );

// ファイル行数を取得
int lineN = countln( file );

double value[]; // 1行のX、Y値を控える数値配列
string newData = ""; // 新しいデータを控える文字列変数

for( int i=0; i<lineN; i++ ){
  value = readln( file );  //1行のデータを配列で取得し、次の行へ
  if( length(value,0) == 0 ){
    //空白行はそのまま改行 (EOLはシステムによって定義されている改行コード値)
    newData += EOL;
  }else{
    //空白でない行はY値をsin(Y値)に変換して書き出し、改行
    newData += value[0] + "	" + sin( value[1] ) + EOL;
  }
}

//ファイルアクセスを閉じる
close( file );

int graph = newGraph2D( 0, 0, 700, 700, "Graph" );

//変換後の文字列データからグラフにプロット
setGraph2DData( graph, newData );
code/Transform.vcssl

上述のプログラムは、文字列の結合処理を伴うために低速です。test.tsvが空白改行を含まない場合は、以下のように数値の配列を直接リニアングラフ2Dへ転送する方が、はるかに高速です。


import tool.Graph2D;
import Math; //sin新関数を使用するのに必要

// 座標値データファイル「test.tsv」を、TSV形式の読み込みモードで開く
int file = open( "test.tsv", READ_TSV );

// ファイル行数を取得
int lineN = countln( file );

double value[ ]; // 1行のX、Y、Z値を控える数値配列

double x[lineN]; // 全行のX値を控える数値配列
double y[lineN]; // 全行のX値を控える数値配列

for( int i=0; i<lineN; i++ ){

  //1行のデータを配列で取得し、次の行へ
  value = readln( file );
  x[i] = value[0];
  y[i] = sin( value[1] ); // Y値はsin(Y値)に変換

}

//ファイルアクセスを閉じる
close( file );

int graph = newGraph2D( 0, 0, 700, 700, "Graph" );

//変換後の数値データ配列からグラフにプロット
setGraph2DData( graph, x, y );
code/TransformFast.vcssl

今度の処理は非常に高速で、起動とほぼ同時に変換が完了します。


この記事の著者

松井 文宏
[ RINEARN代表, 博士(理学), 応用情報技術者 ]
VCSSLやリニアングラフ3D、その他諸々を開発しています。ガイド類や記事も書いています。


スポンサーリンク



この階層の目次
新しいお知らせ

ExevalatorのVer.2.4をリリース—MCPをサポートし、AI用の計算ツールとしても使用可能に
2025-11-15 - 式計算ライブラリExevalatorのVer.2.4をリリースしました。今回から、AIとやり取りするためのプロトコルである「MCP」をサポートし、AI用の計算ツールとしても使用可能になりました!

Exevalatorの最新版Ver.2.3をリリース、新たにPythonで使用可能に
2025-11-04 - 式計算ライブラリExevalatorのVer.2.3をリリースしました。今回から、新たにPython製のプログラムでも使用可能になりました!AI用ツール開発需要などの背景も踏まえて、詳細をお知らせします。

Exevalatorをアップデート、エラーメッセージの日本語化が手軽に
2025-10-31 - 式計算ライブラリExevalatorのVer.2.2.2をリリースしました。今回から、エラーメッセージを手軽に日本語化できるようになりました。数件のバグ修正&微調整も作んでいます。詳細をお知らせします。

関数電卓RINPn(りんぷん)オンライン版の内部構造を解説
2025-10-22 - 先日登場した、関数電卓ソフトRINPn(りんぷん)のオンライン版の内部構造を解説します。オープンソースなので、自由に改造・流用して、自分だけのWeb電卓を作る事も可能!(かもしれない)

関数電卓RINPn(りんぷん)、どこでもすぐ使えるオンライン版が登場!
2025-10-21 - フリー関数電卓ソフトRINPn(りんぷん)に、Web上でどこでもすぐ使える「オンライン版」が新登場しました!PCだけでなく、スマホでも利用可能です。詳細をお知らせします!

VCSSLのサポートAIが登場!ただし実用品質にはChatGPT有料アカウント(Plus)での利用推奨
2025-08-19 - プログラミング言語VCSSLについての質問対応や、コーディング作業を手伝ってくれるAIさんが登場しました!使用までの流れや推奨事項を解説し、実際の回答例や生成コード例などもたくさん紹介します!

各ソフトやVCSSLの英語版ドキュメント整備がほぼ完了
2025-06-30 - RINEARNでは2年前から、AIの補助による英語版ドキュメントの大幅拡充計画を進めてきました。今回、主要ドキュメント&コンテンツの英訳がほぼ完了し、一応の目標水準に達しました。詳細をお知らせします。

VCSSLの最新版をリリース:外部プログラムとの連携機能を少し強化、他
2025-05-25 - VCSSL3.4.52をリリースしました。外部プログラム(C言語製の実行ファイル等)との連携機能を少し強化し、文字化け対策やOS判別などを可能にしました。他にも細かい機能追加があります。詳細をお知らせします。

VCSSLの最新版をリリース、Java24上での非互換な挙動を対処
2025-04-22 - VCSSL3.4.50をリリースしました。Java24環境上でのネットワークドライブ関連のファイルパス解決で、従来環境とは異なる挙動が生じていたのを解消しました。詳細をお知らせします。

リニアングラフやVCSSLの最新版をリリース、目盛りの位置や内容を自由に指定可能に!
2024-11-24 - リニアングラフ3D/2Dを更新し、自由な位置に、自由な表記内容の目盛りを描けるようになりました!併せて、Java言語やVCSSLでの、プログラム制御用APIも拡張しています。詳細をお知らせします。