coding Shift_JIS; import Math; import Text; import GUI; import File; import tool.Graph2D; /** グラフに描画する数式 y(x) のデフォルト入力値です。 */ const string DEFAULT_Y_EXPRESSION = "sin(3*x)"; /** グラフのX範囲の最大値(右端)のデフォルト入力値です。 */ const string DEFAULT_X_MAX = "1.0"; /** グラフのX範囲の最小値(左端)のデフォルト入力値です。 */ const string DEFAULT_X_MIN = "-1.0"; /** グラフのプロット点数のデフォルト入力値です。 */ const string DEFAULT_X_N = "100"; // 以下、グラフやGUIコンポーネントIDを格納する変数 /** グラフのIDを格納します。 **/ int graph = NULL; /** 入力画面のウィンドウのIDを格納します。 */ int window = NULL; /** y(x) の数式を入力するテキストフィールドのIDを格納します。 */ int expressionField = NULL; /** X軸の最大値を入力するテキストフィールドのIDを格納します。 */ int xMaxField = NULL; /** X軸の最小値を入力するテキストフィールドのIDを格納します。 */ int xMinField = NULL; /** グラフのプロット点数を入力するテキストフィールドのIDを格納します。 */ int xNField = NULL; /** PLOTボタンのIDを格納します。 */ int plotButton = NULL; /** CLEARボタンのIDを格納します。 */ int clearButton = NULL; /** EXPORTボタンのIDを格納します。 */ int exportButton = NULL; /** EXITボタンのIDを格納します。 */ int exitButton = NULL; /** * プログラムの開始時に自動で実行されます。 */ void main(){ // GUIを備えたツールではコンソール画面は邪魔なので非表示化 hide(); // システム側で標準接続されている2DグラフソフトがあればIDを取得(無ければnewGraph2D関数同様、新規に立ち上がる) graph = getGraph2D(); // ※ 普通に newGraph2D 関数で新規生成しないのは、このプログラムがリニアングラフ2Dにも同梱されるツールであり、 // リニアングラフ2D上でメニューからこのプログラムを実行した際に、そのグラフ自身を制御対象とするためです。 // グラフ画面の位置とサイズを設定 setGraph2DLocation(graph, 330, 0); setGraph2DSize(graph, 720, 600); // 入力画面を起動 createInputWindow(); // ※ ユーザーがボタンを押すとグラフが描かれる処理などは、 // 後方の onButtonClick 関数を起点として実行されます。 } /** * 引数に指定された数式をグラフにプロットします。 * * @param yExpression プロットするyの数式(xの関数) * @param xMin x軸の最小値 * @param xMax x軸の最大値 * @param n プロット点数 */ void plotGraph( string yExpression, double xMin, double xMax, int n ){ // グラフに転送するデータ配列 double xArray[n]; double yArray[n]; // グラフを構成する点の X, Y 座標を格納する変数 //(入力された y の数式の中でも変数 x は参照するので、スコープの都合上ここで宣言) double x; double y; // y の数式が文法的に正しいか検査 if( !evaluable(yExpression, 0.0) ){ alert("y(x)の式に誤りがあります。"); return; } // xをx軸上でn分割した点において、数式からyの値を求め、配列に格納 float dx = (xMax-xMin)/(n-1); for( int i=0; i