Now Loading...
※ ZIPファイルを展開して「 VCSSL.jar 」をダブルクリックして下さい。 動作には Java が必要です。 このVCSSLコードのライセンスは パブリックドメイン(CC0)です(詳細: ReadMe.txt)。

ユーザーが入力した数式を2Dグラフにプロットする

ユーザーが入力した数式を、2次元グラフにプロットする、単純なプログラムです。

概要

このVCSSLプログラムは、ユーザーが入力した数式を2Dグラフにプロットします。 サンプル的な短いコードなので、改造や流用のベースに適しています。

使用方法

ダウンロードと起動

上の画面の「 ダウンロードして実行 」ボタンを押して ZIP ファイルをダウンロードし、 右クリックして「すべて展開」してください。 展開した中にある「 VCSSL.jar(JARファイル) 」をダブルクリックすると、プログラムが起動します。

起動後の操作方法

起動すると、まず数式を入力する画面が表示されますので、入力してください。

数式入力画面

続いてX軸の範囲(最小値と最大値)を入力すると、グラフ画面が起動し、数式のグラフがプロットされます。

グラフ画面

コード解説

それでは、このプログラムのコード内容について解説していきます。 このプログラムのコードは、プログラミング言語VCSSLで記述されています。

前提

このプログラムのコード内容は、「 配列を2Dグラフにプロットする 」の応用となっています。 必要に応じて、そちらのコードもご参照ください。

コード全体

まずは、コード全体を見てみましょう。50行未満の短いコードです。

以上です。流れとしては、前半部で各パラメータや数式などを設定・取得し、 後半部で数式の値を計算して座標値配列に格納し、最後にそれをグラフにプロットしています。

先頭部分

先頭部分を見てみましょう。

先頭の「 coding Shift_JIS; 」では、プログラムの文字コードを明示しています( UTF-8も可 )。 必須ではありませんが、書いておくと文字化けするのを防げます。

「 import tool.Graph2D; 」の部分は、2次元グラフを扱うためのライブラリ「 tool.Graph2D 」を読み込んでいます。

「 import Math; 」の部分は、各種数学関数を提供する標準ライブラリ「 Math 」を読み込んでいます。 こうしておく事で、ユーザーが入力する数式で sin や cos などの使用をサポートする事ができます。

各パラメータや数式の用意

続いて、各パラメータや数式の用意です。

この通り、基本的には普通の変数定義です。

「 const int N = 100; 」の const は値を変更できなくする(定数にする)ためのキーワードで、付けても付けなくてもいいですが、付けておくと誤って書き換えてしまう事を防げます。

input関数は、ダイアログを表示して、ユーザーに値を入力してもらうための関数です。 ここではプロット範囲や数式などの入力に使用しています。 GUIで入力画面を作っても良いのですが、値が少ない場合はこのようにinput関数を使うほうが楽です。

座標値配列の用意

続いて今回の中核です。ここではユーザーが入力した数式の値を計算して、座標値配列に代入します。

ここで使用している feval 関数は、文字列変数に格納された式の内容を計算(評価)して、 値を float 型で返す関数です。 第二引数に 0.0 を指定していますが、こうしておくと式中の整数リテラル(数字)を小数と見なすオプションが適用されます (0.0でなくてもfloat型の値なら何でも同じ)。

今回のように数式プロットツールなどを作る場合、ユーザーが式中に "1/2" や "sin(1)" といった項を記述する事が予想されますが、 これを言語仕様のまま処理すると、整数除算や引数型エラーなど、色々と面倒な事になります。 なので、このようなオプションを付けて、数字を小数として扱わせます。

なお、feval 関数は eval 関数の派生型で、実はここは普通に eval 関数でも実行できます。 しかし、eval 関数は戻り値をstring型の配列で返すので、今回のように結果をfloat型の変数で受け取る場合、 内部でstring→float変換や、配列→非配列変換などのやや重い処理が生じます。 今回くらいの計算量では問題にならないのですが、プロット点数を増やしたり、 アニメーションなどを行う場合はボトルネックになっても嫌なので、 このように結果がfloatと決まりきっている場合は feval 関数を使用します。

式の動的評価というと一般に遅いイメージがありますが、 VCSSLの eval / feval 関数は、同じ式内容での連続呼び出しに関しては構文解析結果がキャッシュされるため、 あまり気にする必要はありません。 関数コールのオーバーヘッドを除けば、数式をそのままコード中にベタ書きしたのと大差ない速度で走ります。

プロット

最後に、書き出したファイルを2次元グラフにプロットする部分です。

上のほうの行の、newGraph2D関数で、2次元グラフソフトを起動しています。 この関数は、呼ぶ度にグラフソフトを1個起動し、そのグラフソフトに固有のID番号を割り振って返します。

例えば2次元グラフソフトを何個も起動した場合、12番グラフ、22番グラフ、101番グラフ、 …といったように、それぞれに番号が割り振られているわけです。 上では、生成したグラフに割り振られたID番号をint型変数「 graph 」に格納しているわけです。

続いて下のほうの行です。ここでは、setGraph2DData関数で、先ほど起動した2Dグラフソフトに、 座標値配列 xData, yData をプロットさせています。 ここで第一引数に、先ほどグラフ起動時に受け取ったID番号 graph を指定しています。 グラフが複数ある場合でも、このようにID番号で操作対象のグラフを区別できるわけです。

コードのライセンス

このVCSSLコードは著作権フリー(パブリックドメイン)で公開しています。 そのままでのご利用はもちろん、言語の種類を問わず、改造や流用などもご自由に行ってください。



スポンサーリンク



ユーザーが入力した数式を2次元グラフにプロットする

実行時にユーザーが入力した数式の値を、2次元グラフにプロットするサンプルプログラムです。
配列を3次元グラフにプロットする

座標値配列の内容を、3次元グラフにプロットするサンプルプログラムです。
配列を2次元グラフにプロットする

座標値配列の内容を、2次元グラフにプロットするサンプルプログラムです。
ファイルを3次元グラフにプロットする

座標値ファイルの内容を、3次元グラフにプロットするサンプルプログラムです。
ファイルを2次元グラフにプロットする

座標値ファイルの内容を、2次元グラフにプロットするサンプルプログラムです。
2DCGと3DCGの合成

2DCGと3DCGを一枚に合成し、画面に表示するプログラムの例です。
カラーコードとRGBの相互変換と色表示

カラーコードとRGB値を相互変換し、色も表示できるプログラムです。
頂点配列によるモデルの変形アニメーション

頂点配列によってモデルを変形アニメーションさせるサンプルです。
頂点配列によるモデルの作成(四角形格子メッシュ形式)

四角形格子メッシュの形式で、頂点配列からモデルを作成するサンプルです。
スポンサーリンク

インデックス
ユーザーが入力した数式を2次元グラフにプロットする

実行時にユーザーが入力した数式の値を、2次元グラフにプロットするサンプルプログラムです。
配列を3次元グラフにプロットする

座標値配列の内容を、3次元グラフにプロットするサンプルプログラムです。
配列を2次元グラフにプロットする

座標値配列の内容を、2次元グラフにプロットするサンプルプログラムです。
ファイルを3次元グラフにプロットする

座標値ファイルの内容を、3次元グラフにプロットするサンプルプログラムです。
ファイルを2次元グラフにプロットする

座標値ファイルの内容を、2次元グラフにプロットするサンプルプログラムです。
2DCGと3DCGの合成

2DCGと3DCGを一枚に合成し、画面に表示するプログラムの例です。
カラーコードとRGBの相互変換と色表示

カラーコードとRGB値を相互変換し、色も表示できるプログラムです。
頂点配列によるモデルの変形アニメーション

頂点配列によってモデルを変形アニメーションさせるサンプルです。
頂点配列によるモデルの作成(四角形格子メッシュ形式)

四角形格子メッシュの形式で、頂点配列からモデルを作成するサンプルです。

お知らせ( Twitter )

スポンサーリンク