[ 前へ | 目次 | 次へ ]

その他のライブラリ

ここでは、前回扱ったライブラリ以外で、よく用いるライブラリについて扱います。

スポンサーリンク


より幅広い機能を提供する標準ライブラリ

標準ライブラリは、前回扱ったものが全部ではありません。 前回扱ったライブラリは、VCSSL 2.0 の頃から存在し、言語として最低限必要になる基板機能を提供しているものです。

そして VCSSL 3.0 以降では、より幅広い機能を提供するライブラリも順次増えていっています。 それらは、最初は標準ライブラリとは別扱いの位置づけでしたが、 VCSSL 3.4 の時点で多くが標準ライブラリに統合されました(旧 Open VCSSL Library など)。

以下では、実際にそららの内のいくつかを使用してみます。

基本的なデータ構造

まずは、「スタック」や「キュー」などのデータ構造を扱うライブラリです。

スタクとキューは、値を出し入れして、溜めておくための仕組みです。 両者で異なるのはデータ の取り出し順序で、 キューは入れた順に、スタックは逆順に取り出します。 つまりスタックでは、最後 に入れたデータが最初に取り出されます。

データ構造を扱うための機能は、一般にジェネリクスを用いた構造体と関数によって提供されます。 そのため、任意型の値(自作の構造体を含む)を扱う事ができます。

以下に使用例を掲載します:


import data.Stack;  // スタクの機能を提供するライブラリ
import data.Queue;  // キューの機能を提供するライブラリ   


Stack s;   // 整数値のスタックを扱う構造体
push<int>(s, 1);  // スタック s に値「1」を入れる
push<int>(s, 2);  // スタック s に「2」を入れる

println("スタックから値を取り出します:");
println( pop<int>(s) );  //スタック s から値を 1 つ取り出す
println( pop<int>(s) );  //スタック s から値を 1 つ取り出す 


Queue<int> q;  //整数値のキューを扱う構造体
enqueue<int>(q, 1) ;  // キュー q に値「1」を入れる
enqueue<int>(q, 2) ;  // キュー q に「2」を入れる

println("キューから値を取り出します:");
println( dequeue<int>(q) );  //キュー q から値を 1 つ取り出す
println( dequeue<int>(q) );  //キュー q から値を 1 つ取り出す
StackSample.vcssl

上のプログラムを実行すると、VCSSL コンソールに以下のように表示されます:

スタックから値を取り出します:
2
1
キューから値を取り出します:
1
2

上の通り、スタックでは入れたのと逆順に、キューでは入れた順に、値が取り出された事が分かります。

data.Stack/Queueはスタックとキューを扱うライブラリで、詳細情報は以下のURLで参照できます。

軽量フレームワーク

描画やアニメーションなど、特別な処理を記述する必要があるものの、 頻繁に用いられるような用途に関しては、毎回同じような内容を記述しなくても済むように、 軽量フレームワークが用意され ています。

用途に応じたフレームワークを用いる事で、ゼロからプログラムを開発しなくても、 最低限 必要な部分だけを記述すれば済むようになります。

3D描画

実際に3D描画を扱うためのフレームワークを使用してみましょう:


import Math;
import Color;
import Graphics3D;
import graphics3d.Graphics3DFramework; // 3D 描画用フレームワーク


// モデルの ID 格納変数や時刻変数など
int axis, box, sphere, cone;
float time=0.0;  


/*
 * 初期化を行う関数(プログラムの最初に一度だけ呼び出される)
 * ここには、3D モデルの生成や配置など、
 * プログラムの最初に行いたい準備処理を記述する
 */
void initialize(int rendererID){

	// フレームワークのパラメータ設定
	setBackgroundColor(Color.BLACK); //背景色の設定
	setWindowSize(800, 600); //ウィンドウ幅,高さの設定

	// 座標軸モデルを配置
	axis = newAxisModel(3.0, 3.0, 3.0); //生成
	mountModel(axis, rendererID); //配置

	// 箱モデルを配置
	box = newBoxModel(1.0, 1.0, 1.0); //生成
	setModelColor(box, 255, 0, 0, 255); //色設定(赤,緑,青,α)
	mountModel(box, rendererID); //配置

	// 球モデルを配置
	sphere = newSphereModel(0.5, 0.5, 0.5, 38, 24); //生成
	moveModel(sphere, 1.5, 1.5, 0.0);

	//移動(dX,dY,dZ)
	setModelColor(sphere, 0, 0, 255, 255); //色設定(赤,緑,青,α)
	mountModel(sphere, rendererID); //配置

	// 円錐モデルを配置
	cone = newConeModel(0.5, 0.5, 1.0, 38, 2); //生成
	moveModel(cone, 0.0, 0.0, 1.0); //移動(dX,dY,dZ)
	setModelColor(cone, 0, 255, 0, 255); //色設置(赤,緑,青,α)
	mountModel(cone, rendererID); //配置
}


/*
 * 更新処理を行う関数(繰り返し呼び出される)
 * ここには、3D モデルの移動など、
 * 毎ループ行いたい任意の処理を記述する
 */
void update(int rendererID){

	rotXModel(box, 0.08); //箱モデルを X 軸まわり回転  
	rotZModel(sphere, 0.01); //球モデルを Z 軸まわり回転  

	//円錐モデルを適当に移動(dX,dY,dZ)
	moveModel(cone, 0.1*sin(time), 0.1*sin(3.0*time), 0.0);
	time += 0.1; // 時刻を少し進める
}
FrameworkSample3D.vcssl

上のプログラムを実行すると、下図のような3Dアニメーション映像が表示されます。

実行結果
実行結果

上で用いた graphics3d.Graphics3DFramework は、3D描画用途をサポートする、 アニメーション対応のフレームワークです。 詳細情報は以下の URL で参照できます。

- Graphics3DFramework リファレンス -
https://www.vcssl.org/ja-jp/lib/graphics3d/Graphics3DFramework

VCSSLには、3D描画を扱うための標準ライブラリ「 Graphics3D 」が存在します。 しかし、それだけで現実的な3Dプログラムを開発するには、表示画面や描画エンジンの生成や、 アニメーションループの制御、ライトの設定など、面倒な処理を自分で記述する必要があり、 簡易用途ではやや不便です(逆に、細かい部分まで自分で調整したい場合には便利です)。

そこでgraphics3d.Graphics3DFrameworkを使用すると、 そういった面倒な部分はフレームワークが自動で行ってくれます。 そして、準備が完了したタイミングでonStart関数、 アニメーション中の画面更新タイミングでonUpdate関数を呼んでくれます。 なので、これらの関数内に目的の処理を記述するだけで、手軽に3Dアニメーションプログラムを開発できます。

なお、このフレームワークでは、あくまで面倒な部分を自動化してくれるだけなので、 独自に記述する部分に関しては標準ライブラリ「 Graphics3D 」の関数を使用する必要があります。 上のプログラムでも、モデルの生成や配置、移動などにGraphics3Dライブラリの関数を使用しています。 標準ライブラリ「 Graphics3D 」に関する詳細情報は以下のURLで参照できます。

- Graphics3D ライブラリ リファレンス -
https://www.vcssl.org/ja-jp/Graphics3D

2D描画

なお、3D同様、2D描画用のフレームワークも用意されています。使用例を以下に掲載します:


import Graphics2D;
import graphics2d.Graphics2DFramework; // 2D描画用フレームワーク


/*
 * 初期化処理を行う関数(プログラムの最初に一度だけ呼び出される)
 * ここには、プログラムの最初に行いたい準備処理を記述する
 */
void initialize (int rendererID) {
	// フレームワークのパラメータ設定
	setAnimationState(false); //アニメーションはしないので無効化
	setWindowSize(300, 300); //ウィンドウサイズの設定
}


/*
 * 描画処理を行う関数(繰り返し呼び出される)
 * ここには、2DCGの描画処理などを記述する
 */
void paint(int rendererID) {

	string imageFilePath = "fighter.png"; //画像ファイル

	// 青色で直線を描画
	setDrawColor(rendererID, 0, 0, 255, 255); //赤,緑,青,α
	drawLine(rendererID, 0, 0, 100, 100); //x,y,w,h

	// 緑色で長方形を描画
	setDrawColor(rendererID, 0, 255, 0, 255); //赤,緑,青,α
	drawRect(rendererID, 0, 100, 100, 100, true); //x,y,幅,高さ,塗りつぶし

	// 赤色で楕円を描画
	setDrawColor(rendererID, 255, 0, 0, 255); //赤,緑,青,α
	drawOval(rendererID, 50, 0, 150, 100, false); //x,y,幅,高さ,塗りつぶし
}
FrameworkSample2D.vcssl

上のプログラムを実行すると、ウィンドウに線、長方形、楕円が表示されます。

実行結果
実行結果

上で用いたgraphics2d.Graphics2DFrameworkは、2D描画用途をサポートする、 アニメーション対応のフレームワークです。詳細情報は以下のURLで参照できます。

- Graphics2DFramework ライブラリ リファレンス -
https://www.vcssl.org/ja-jp/lib/graphics2d/Graphics2DFramework

描画関数などに関しては、標準ライブラリ「 Graphics2D 」を使用する必要があります。詳細情報は以下のURLで参照できます。

- Graphics2D ライブラリ リファレンス -
https://www.vcssl.org/ja-jp/lib/Graphics2D

グラフのプロット

独立したソフトウェアのようなツールとやり取りするAPIライブラリも存在します。 例えば、グラフソフトと通信し、グラフをプロットする機能を提供するライブラリなどが挙げられます。 ただし、そうした機能は実装規模が比較的が大きいため、サポートされるかどうかは、処理系開発元の判断によります。 グラフソフト関連の機能などは、数値計算分野に向けた処理系ではサポートされるかもしれませんし、 全く必要の無い用途に向けてはサポートされないかもしれません。

以上のような事を前提とした上で、 数値計算用の2D/3Dグラフソフトを制御するためのライブラリ仕様が、以下のURLの通りに用意されています。

- 2次元グラフ tool.Graph2D -
https://www.vcssl.org/ja-jp/lib/tool/Graph2D
- 3次元グラフ tool.Graph3D -
https://www.vcssl.org/ja-jp/lib/tool/Graph3D

上の「 tool.Graph2D/Graph3D 」ライブラリがサポートされている処理系においては、 上記仕様の通りに、2D/3Dグラフをプロットする事ができます。

2Dグラフ

実際の使用例は、細かい部分は処理系依存ですが、大まかに以下のようになります。まずは、2Dグラフの場合です:


import tool.Graph2D; // 2Dグラフソフト制御用ライブラリ


// ファイル「data2d.tsv」にデータを書き出す
int fileID = open("data2d.tsv", "wtsv"); // wtsvはTSV形式の書き込みモード
float dx = 0.1;
float x;
float y;
for(int i=0; i<10; i++) {
    x = i * dx;
    y = x * x;
    writeln(fileID, x, y); // ファイル書き込み
}
close(fileID); // ファイルを閉じる(忘れると書き込みが完了しないので注意)


// 2次元グラフソフトを起動
int graph2D = newGraph2D();

// ファイル「data2d.tsv」をグラフにプロット
setGraph2DFile(graph2D, "data2d.tsv");
Graph2DSample.vcssl

実行すると、以下のようなグラフが表示されます:

実行結果
実行結果

座標軸の目盛りやラベルがどのように表示されるかは処理系依存です。

3Dグラフ

続いて、3Dグラフの場合です:


import tool.Graph3D;  // 3Dグラフソフト制御用ライブラリ


// ファイル「data3d.tsv」にデータを書き出す
int fileID = open("data3d.tsv", "wtsv"); // wtsvはTSV形式の書き込みモード
float dx = 0.1;
float dy = 0.1;
float x, y, z;
for(int i=0; i<=30; i++) {
    for(int j=0; j<=30; j++) {
        x = i * dx;
        y = j * dy;
        z = x * x + y * y;
        writeln(fileID, x, y, z); // ファイル書き込み
    }
    writeln(fileID, "");
}
close(fileID); // ファイルを閉じる(忘れると書き込みが完了しないので注意)


// 3次元グラフソフトウェアを起動
int graph3D = newGraph3D();

// ファイル「data3d.tsv」をグラフにプロット
setGraph3DFile(graph3D, "data3d.tsv");
Graph3DSample.vcssl

実行すると、以下のようなグラフが表示されます:

実行結果
実行結果

座標軸の目盛りやラベルがどのように表示されるかは処理系依存です。



スポンサーリンク



この階層の目次
RINEARN からのお知らせ
※ VCSSL は RINEARN が開発しています。

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

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

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

Exevalator 2.2 をリリース、TypeScript 対応によりWebブラウザ上で動作可能に
2024-10-22 - オープンソースの式計算ライブラリ「Exevalator(エグゼバレータ)」の2.1をリリースしました。新たに TypeScript に対応し、Webブラウザ上での式計算にも使えるようになりました。詳細を解説します。

アシスタントAI作成の舞台裏(その2、作成編)
2024-10-12 - アシスタントAIの作成方法解説の後編です。実際にChatGPTの「GPTs」機能を用いて、アシスタントAIを作成する手順や、独自の知識をもたせたり、精度を出すためのノウハウなどを解説しています。

アシスタントAI作成の舞台裏(その1、基礎知識編)
2024-10-07 - アシスタントAI作成方法解説の前編です。今回はまず、アシスタントAIを作る前に抑えておきたい、基礎知識を延々と解説しています。そもそもLLM型AIとはどんな存在か? RAGとは何か? 等々です。

ソフトの利用をサポートしてくれるアシスタントAIを提供開始!
2024-09-20 - RINEARN製ソフトの使い方の質問応答や、一部作業のお手伝いをしてくれる、アシスタントAIを提供開始しました。ChatGPTアカウントさえあれば、誰でも無料で使用できます。使い方を解説します。

Exevalator 2.1 をリリース、新たに Visual Basic に対応
2024-07-28 - オープンソースの式計算ライブラリ「Exevalator(エグゼバレータ)」の2.1をリリースしました。今回から、新たに Visual Basic(VB.NET)でも使用できるようになりました。詳細を解説します。

関数電卓 RINPn(りんぷん)、Esc キーで計算式の一発クリアが可能に
2024-07-20 - 関数電 RINPn の Ver.1.0.2 をリリースしました。今回から、キーボードの「 Esc 」キーを押すと、入力中の計算式を一発でクリアできるようになりました。詳細を解説します。

Exevalator 2.0 をリリース、互換性に注意が必要なバグ修正が 1 件
2024-07-14 - オープンソースの式計算ライブラリ「Exevalator (エグゼバレータ)」の2.0をリリースしました。今回の更新では、互換性に注意を要する 1 件のバグ修正があります。詳細を解説します。