/* processing でビュホンの針を描く */ //初期パラメータの指定 int sq_size = 400; // 正方形のサイズ int output_size = 100; // 文字出力のサイズ int d = 50; // 平行線の幅 int l = 50; // 針の長さ (l≦d) int step = 100; // 針の本数 int mergin = int(d/sqrt(2)); // マージンの幅を平行線から計算(キャスト) int alcnt = 0; // 全てのカウント int crcnt = 0; // 交わった針のカウント int lchk =0; // マウスで開始と停止をチェックするため /* void settings() { size(sq_size, sq_size+output_size); } */ void setup() { size(400, 500); // smooth(); // 滑らかな描画のおまじない(処理は遅くなる) background(#373BED); int i; // y座標がd間隔で平行線を引く for (i=d; i d) fdist = fdist - d; alcnt ++; if( fdist > d/2) fdist = d - fdist; if(l*sin(theta)/2 > fdist){ crcnt ++; stroke(255, 0, 0); //赤色 }else stroke(0, 255, 0); //青色 line(sx, sy, tx, ty); // コンソールエリアの数値の出力 // println(alcnt,"(cross)", crcnt, "Pi approx.", 2*l*alcnt/(float(crcnt)*d)); println(alcnt); println(2*l*alcnt/(float(crcnt)*d)); } // キーを押したときの処理 void keyPressed() { if ( key == 's' ) noLoop(); // 停止 if ( key == 'c' ) loop(); // 再開 }