coding Shift_JIS; // 文字化け対策 // グラフソフトを操作するために必要な行 import tool.Graph3D ; // 数学関数を使うために必要な行 import Math; // ファイルをCSV書き込みモードで開き、IDを変数に代入 int fileID = open( "file.csv", WRITE_CSV ); // y 方向のくりかえし for ( int j=-100; j<=100; j++ ) { // x 方向のくりかえし for ( int i=-100; i<=100; i++ ) { // ※ 外側のくりかえしで j が 1 ずつ増える // ※ 内側のくりかえしで i が 1 ずつ増える // x, y の値を変数に用意 float x = i * 0.005; // x は i に伴い増加 float y = j * 0.005; // y は j に伴い増加 // X-Y平面での点と原点との距離 r を求める float r = sqrt( x * x + y * y ); // 点が X 軸となす角度θを求める // ※ -π/2 〜 3π/2 の範囲で求める方が、atan 関数の連続領域を使って // 単純に求まるため、まずはその範囲で求め、最後に 0 〜 2π に直す float theta = 0.0; if ( x == 0.0 ) { if ( y > 0 ) { theta = PI / 2.0; } else { theta = -PI / 2.0; } } else if ( x > 0.0 ) { theta = atan ( y / x ); } else if ( x < 0.0 ) { theta = atan( y / x ) + PI; } if (theta < 0.0) { // -π/2 〜 3π/2 から 0 〜 2π に直す theta += 2.0 * PI; } // θ と r の値を使って、z の値を計算する float z = sin(5.0*theta + 10.0*sin(14.0*r)) * sin(6.0*r); // 小数点以下5桁までに四捨五入( 誤差の丸め ) x = round( x, 5, HALF_UP ); y = round( y, 5, HALF_UP ); z = round( z, 5, HALF_UP ); // x, y, z の値を「 , 」区切りで書き込む writeln( fileID, x, y, z ); } // 内側のくりかえしの最後に、空の行をはさむ writeln( fileID, "" ); } // ファイルを閉じる close( fileID ); // グラフソフトを起動し、CSVファイルを読み込ませて描画 int graphID = newGraph3D(); setGraph3DFile( graphID, "file.csv" ); // 点を描かずに、曲面を描くようにオプションを設定 setGraph3DOption( graphID, "WITH_POINTS", false ); setGraph3DOption( graphID, "WITH_MEMBRANES", true );