/* processing でモンテカルロシミュレーション */ //初期パラメータの指定 int sq_size = 400; // 正方形のサイズ int dot_size = 5; // ドットのサイズ int output_size = 100; // 文字出力のサイズ int count=0; // 試行総数 int incount=0; // 円の中のドットの数 int lchk =0; // マウスで開始と停止をチェックするため /* void settings() { size(sq_size, sq_size+output_size); } */ void setup() { size(400,500); // web では生の数値でないとうまく表記されない! // smooth(); // 滑らかな描画のおまじない(処理は遅くなる) background(#373BED); stroke(#FFFFFF); //輪郭線の色を指定 line(0, sq_size, sq_size, sq_size); line(sq_size, 0, sq_size, sq_size); arc(0, sq_size , sq_size*2, sq_size*2, 3*PI/2, 2*PI ); //arc( x座標, y座標, 横の直径, 縦の直径, 弧を描き始める角度, 円弧を描き終える角度 ); //角度は時計回りで指定!!! //ellipse(0, sq_size,sq_size*2,sq_size*2); //文字のサイズ textSize(20); //色の指定 fill(#EB0FF0); text("Monte Carlo Simulation (approx. Pi)", output_size/2, sq_size+output_size/2); //色の指定 fill(#56AA5F); text("Press Left mouse button (start/stop)", output_size/2, sq_size+int(output_size*0.75)); noLoop();// draw()を実行しない } void mousePressed(){// マウスを奇数回押せば開始、偶数回で停止 if (lchk%2 == 0) loop(); else noLoop(); lchk++; } void draw() { //点を落とす int x = int(random(0, sq_size)+0.5); // 0からsq_size まで(sq_sizeを含む)の乱数 int y = int(random(0, sq_size)+0.5); // 0からsq_size まで(sq_sizeを含む)の乱数 int dist2 = x*x + (y-sq_size)*(y-sq_size); count ++; if( dist2 < sq_size*sq_size ){ incount++; stroke(255, 0, 0); //赤色 }else stroke(0, 255, 0); //青色 //ドットを描く ellipse(x, y, dot_size,dot_size); // コンソールエリアの数値の出力 // println(count,"(in circle)", incount, "Pi approx.", 4*float(incount)/count); println(count); println(4*float(incount)/count); } // キーを押したときの処理 void keyPressed() { if ( key == 's' ) noLoop(); // 停止 if ( key == 'c' ) loop(); // 再開 }