coding Shift_JIS; import Math; import Text; import GUI; import File; import tool.Graph3D; /** グラフに描画する数式 x(t) のデフォルト入力値です。 */ const string DEFAULT_X_EXPRESSION = "cos(t*4*PI)"; /** グラフに描画する数式 y(t) のデフォルト入力値です。 */ const string DEFAULT_Y_EXPRESSION = "sin(t*2*PI)"; /** グラフに描画する数式 z(t) のデフォルト入力値です。 */ const string DEFAULT_Z_EXPRESSION = "sin(t*PI)"; /** 媒介変数 t(時刻)の最大値(終了値)のデフォルト入力値です。 */ const string DEFAULT_T_MAX = "1.0"; /** 媒介変数 t(時刻)の最小値(開始値)のデフォルト入力値です。 */ const string DEFAULT_T_MIN = "-1.0"; /** 媒介変数 t の範囲を分割する点数(プロット点数)のデフォルト入力値です。 */ const string DEFAULT_T_N = "300"; // 以下、グラフやGUIコンポーネントIDを格納する変数 /** グラフのIDを格納します。 **/ int graph; /** 入力画面のウィンドウのIDを格納します。 */ int window; /** x(t) の数式を入力するテキストフィールドのIDを格納します。 */ int xExpressionField; /** y(t) の数式を入力するテキストフィールドのIDを格納します。 */ int yExpressionField; /** z(t) の数式を入力するテキストフィールドのIDを格納します。 */ int zExpressionField; /** 時刻 t の最大値を入力するテキストフィールドのIDを格納します。 */ int tMaxField; /** 時刻 t の最小値を入力するテキストフィールドのIDを格納します。 */ int tMinField; /** 時刻の刻み数(=グラフのプロット点数)を入力するテキストフィールドのIDを格納します。 */ int tNField; /** PLOTボタンのIDを格納します。 */ int plotButton; /** CLEARボタンのIDを格納します。 */ int clearButton; /** ANIMATIONボタンのIDを格納します。 */ int animationButton; /** EXPORTボタンのIDを格納します。 */ int exportButton; /** EXITボタンのIDを格納します。 */ int exitButton; /** * プログラムの開始時に自動で実行されます。 */ void main(){ // GUIを備えたツールではコンソール画面は邪魔なので非表示化 hide(); // システム側で標準接続されている3DグラフソフトがあればIDを取得(無ければnewGraph3D関数同様、新規に立ち上がる) graph = getGraph3D(); // ※ 普通に newGraph3D 関数で新規生成しないのは、このプログラムがリニアングラフ3Dにも同梱されるツールであり、 // リニアングラフ3D上でメニューからこのプログラムを実行した際に、そのグラフ自身を制御対象とするためです。 // グラフ画面の位置とサイズを設定 setGraph3DLocation(graph, 350, 0); setGraph3DSize(graph, 720, 600); // グラフのプロットオプションを設定(点プロットと線プロットをONに) setGraph3DOption( graph, "WITH_POINTS", true ); setGraph3DOption( graph, "WITH_LINES", true ); setGraph3DOption( graph, "WITH_MEMBRANES", false ); setGraph3DOption( graph, "WITH_MESHES", false ); // 設定画面を起動 createSettingWindow(); } /** * 引数に指定された数式をグラフにプロットします。 * * @param xExpression プロットするxの数式(時刻変数tの関数) * @param yExpression プロットするyの数式(時刻変数tの関数) * @param zExpression プロットするzの数式(時刻変数tの関数) * @param yMin 時刻変数tの最小値(開始値) * @param yMax 時刻変数tの最大値(終了値) * @param n プロット点数 */ void plotGraph( string xExpression, string yExpression, string zExpression, double tMax, double tMin, int n ){ // グラフに転送するデータ配列 double xArray[n]; double yArray[n]; double zArray[n]; // グラフを構成する点の x, y, z 座標および時刻 t を格納する変数 //(入力された x, y の数式の中でも変数 t は参照するので、スコープの都合上ここで宣言) double x; double y; double z; double t; // x, y, z の数式が文法的に正しいか検査 if( !evaluable(xExpression, 0.0) ){ alert("x(t)の式に誤りがあります。"); return; } if( !evaluable(yExpression, 0.0) ){ alert("y(t)の式に誤りがあります。"); return; } if( !evaluable(zExpression, 0.0) ){ alert("z(t)の式に誤りがあります。"); return; } // 時間範囲をn分割した時刻 t において、数式から x, y の値を求め、配列に格納 float dt = (tMax-tMin)/(n-1); for( int i=0; i