グラフソフトウェア制御
最後に、プログラミングの応用編です。グラフソフトウェアを制御してみましょう。
グラフソフトウェアの制御
さて、いよいよ終わりが近づいてきました。プログラミング言語VCSSLの機能はまだまだ数多くあり、ここでの解説では、そのほんの一部を駆け足で触れてきたわけですが、全て扱うと数百ページになってしまうため、残念ながら大幅に省略せざるを得ません。
そこで、ここでは応用編として、少し高度な内容を扱い、それで最後としましょう。具体的な題材としては、数ある機能の中から、特にリニアンプロセッサーのユーザー層に適切と思われる、グラフソフトウェアの制御を扱ってみましょう。
ただし、本章ではこれまでのような、完全な形式での解説はしません。仕様書を読みながら、なるべく手探りで進めてみましょう。そうして、仕様書からライブラリの扱い方を習得する感覚を掴んでみてください。
ライブラリのインポート
これまでに用いてきたoutput関数やprintln関数とは異なり、グラフソフトウェアの制御用関数は、そのままでは使用できません。まずは「 ライブラリのインポート 」を行う必要があります。
ライブラリとは、特定の目的を持つ関数がまとめて記載された、特殊なプログラムの事です。通常は、使用するライブラリのファイルを入手し、プログラムと同じ場所か、リニアンプロセッサーのフォルダ内にある「 lib 」フォルダの中に配置する必要があります。
しかし、リニアンプロセッサーには、グラフソフトウェアを制御するためのライブラリが内蔵されており、別途入手する必要はありません。インポートするだけで使用できます。
VCSSLにおけるインポートとは、プログラム内において、使用するライブラリを指定する事を意味します。ライブラリをインポートすると、その中に記載された関数が使用可能になります。
それでは、実際にグラフソフトウェア制御用のライブラリをインポートしてみましょう。以下のように記述してください。
- INPUT -// グラフソフトウェア制御用ライブラリのインポート
import science.graph.Graph2D ;
import science.graph.Graph3D ;
import Math ;
importで始まる行が3つ続いていますが、上の行が2次元グラフソフトウェア制御用ライブラリ、その次の行が3次元グラフソフトウェア制御用のライブラリ、最後の行が数学関数を使用するためのライブラリです。ここでは、これら3つをインポートし、その中の関数を使えるようにしています。
さて、ライブラリをインポートしたのはいいですが、一体どういった関数が使えるのか、また、それらはどんな機能を持っているのかを知らなければ、何も書けませんね。このような時は、ライブラリの仕様書を確認します。ここでは、下記URLに仕様書がありますので、ご確認ください。
仕様書には、ライブラリの概要や、利用できる全関数のリスト、およびそれぞれの関数に対する詳細説明などが記載されています。
ライブラリのインポート
まずすべき事は、恐らくグラフソフトウェアの起動だろうと予想が付くかと思います。それでは、一体どうすれば起動できるのでしょうか?
ここで仕様書を見てみましょう。まず、2次元グラフソフトウェア用の仕様書を見ると、関数リストの先頭に、どうもそれらしい関数の説明が見つかります。
関数仕様 | int newGraph2D( ) |
---|---|
処理内容 | 2次元グラフソフトウェアをデフォルトのサイズで起動し、それに固有の識別番号 ( グラフID ) を割り振って返します。 |
引数 | void |
戻り値 | 起動した2次元グラフソフトウェアに固有のID(グラフィックスID) |
関数仕様の 「 int newGraph2D( ) 」 というのは、「 newGraph2D( ) という関数を呼ぶと、処理結果をint(整数)として返します 」 という意味です。それでは、返される整数の値はどういった意味でしょうか?
処理内容の説明を読むと、どうもそれは、起動したグラフソフトに割り振られる番号のようです。その番号をどう使うのかはまだ分かりませんが、とりあえず後で使いそうなので、変数に格納しておくのが良さそうです。
それでは、この関数を呼び出してみましょう。
- INPUT -// グラフソフトウェア制御用ライブラリのインポート
import science.graph.Graph2D ;
import science.graph.Graph3D ;
import Math ;
// 2次元グラフソフトウェアを起動してみる
int graph2D = newGraph2D( ) ;
実行してみましょう。すると、無事2次元グラフソフトウェアが起動します。
プロットさせるデータの用意
グラフソフトウェアの起動は無事できましたが、次にどうすればデータをプロットさせる事ができるのでしょうか? そもそも、どういった形でデータを用意すればよいのでしょうか。再び、仕様書に目を通してみましょう。
すると、それらしき関数がいくつか見つかります。ファイルをプロットさせたり、文字列や配列をプロットさせたりと、色々なプロット方法が用意されているようです。とりあえずは、シンプルな以下の関数を試してみましょう。
関数仕様 | void setGraph2DData( int graphID, string data ) |
---|---|
処理内容 | グラフソフトウェアがプロット対象とする文字列データ ( ファイルの中身と同等 ) を指定します。 |
引数 | graphID = 対象とするグラフソフトウェアのグラフID data = 文字列データ ( ファイルの中身と同等 ) |
戻り値 | void |
関数仕様の先頭にある「 void 」というキーワードは、「 この関数は何も値を返しません 」という事を意味します。そして、関数名の後の( int graphID, string data )の箇所は、「 この関数を呼び出す際に、int(整数)型とstring(文字列)型の2つの値を受け取ります 」という意味です。
処理内容を見ると、このstring(文字列)型の値には、グラフ用のデータファイルの中身と同じ形式で、データを格納して渡してやればよさそうです。これには、引数なしのload関数で、CONSOLEエリアの内容を文字列として取得できる事を利用すると便利です。
プロット
それでは、実際にデータを用意し、プロットさせてみましょう。具体的な手順としては、まずprintln関数でCONSOLEエリアにデータを全て書き出し、その内容をload関数で取得して変数に格納し、それを上のsetGraph2DData関数に渡してみます。
少し長いですが、以下のように記述し、実行してみてください。
- INPUT -// グラフソフトウェア制御用ライブラリのインポート
import science.graph.Graph2D ;
import science.graph.Graph3D ;
import Math ;
// 2次元グラフソフトウェアを起動してみる
int graph2D = newGraph2D( ) ;
// CONSOLEエリアに、データを書き出す
float dx = 0.1 ;
float x ;
float y ;
for( int i=0; i<10; i++ ){
x = i * dx ;
y = x * x ;
println( x, y ) ;
}
// CONSOLEエリアの内容をstring(文字列)変数に格納
string data = load( ) ;
// グラフにプロット
setGraph2DData( graph2D, data ) ;
実行すると、CONSOLEエリアには以下のように出力されます。
- CONSOLE -
0.0 0.0
0.01 1.0E-4
0.02 4.0E-4
0.03 9.0E-4
0.04 0.0016
0.05 0.0025
0.06 0.0036
0.07 0.0049
0.08 0.0064
0.09 0.0081
そして、グラフは以下のようにプロットされます。
無事プロットできたようです。
3次元グラフソフトウェアでもやってみる
仕様書を見ると、2次元グラフソフトウェアの制御と、3次元グラフソフトウェアの制御は、かなりの部分が似通っており、基本的に同じように使えそうな事が見て取れます。実際に、上で行った過程を、3次元グラフソフトウェアについても行ってみましょう。
今度はさらに長いですが、以下のように記述し、実行してみてください。
- INPUT -// グラフソフトウェア制御用ライブラリのインポート
import science.graph.Graph2D ;
import science.graph.Graph3D ;
import Math ;
// 3次元グラフソフトウェアを起動してみる
int graph3D = newGraph3D( ) ;
// CONSOLEエリアに、データを書き出す
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 ;
println( x, y, z ) ;
}
println( "" ) ;
}
// CONSOLEエリアの内容をstring(文字列)変数に格納
string data = load( ) ;
// グラフにプロット
setGraph3DData( graph3D, data ) ;
実行すると、グラフは以下のようにプロットされます。
無事プロットできたようです。
その他のライブラリ
どうだったでしょうか。仕様書を見ながらライブラリを扱っていく感覚が、何となくでも掴めたでしょうか。実際、今回用いたライブラリはかなり小規模なので、あれこれトライ&エラーを繰り返す内に、他の機能についてもマスターできるかと思います。
ここで扱ったライブラリの他にも、下記URLから、リニアンプロセッサーにあらかじめ内蔵されているライブラリの仕様書を参照する事ができます。 実に様々な機能がありますので、気になったライブラリは、今回と同じ要領で、ぜひ積極的に試してみてください。仕様書さえあれば、適当に触っていても、案外なんとかなるものです。
しかしながら、ある程度以上大きなライブラリになってくると、仕様書だけでは手に負えないものもあります。例えば、VCSSLの標準ライブラリの一つであり、3次元コンピューターグラフィックスを扱う「 Graphics3D 」ライブラリなどがこれに該当します。実際、下記URLで仕様書を参照してみてください。
上記URLの仕様書を参照すると、かなりの数の関数仕様が並んでおり、全てを読むだけでも大変ですし、最初に何をどうすればよいかも全く分からない状態になってしまいます。標準ライブラリの内、このような大きなもの ― GUI, Graphics2D, Graphics3Dライブラリなど ― については、仕様書とは別に、実践的な開発ガイドも参照できます。
より高度な制御へ
ここまで、プログラミングの土台から、ライブラリの扱い方まで、駆け足で解説してきました。ここで 紹介したようなライブラリを活用しつつ、自作の処理を組み合わせる事で、自分の望む処理を行う プログラムを開発する事ができるようになります。そして、そのプログラムは、リニアンプロセッサー のメニューからいつでも使う事ができます。
これはつまり、リニアンプロセッサーにいくらでも、自分の望む機能を追加していけるという事です。 VCSSL は、電卓付属のプログラミング言語としてはなかなか高機能なので、 その気になればかなりのものを作れるはずです。
その一つの例として、リニアンプロセッサーのグラフ機能が挙げられます。 実は、あれらは全て VCSSL で開発されています。実際、
「 File 」メニュー > 「 OpenFile ― ファイルを開く」メニュー
を選択し、そして「 graph 」フォルダ内にある「 z( x, y, t ) 」というファイルを開いてみてください。 リニアンプロセッサーのグラフ機能の「 中身 」を見ることができます。 そしてそれは、紛れも無いVCSSL プログラムである事が確認できるはずです。
その中身は、必要が無ければ、読めなくても全く問題ありません。 しかし、必要ならば、このような機能を独自に作る事ができるという事は、ぜひ覚えておいてください。 そして、必要になった際には、ぜひ機能の自作に挑戦してみてください!