- モンテカルロ法 を使った数値積分によって円周率の近似値を求めるアニメーション
動作イメージ
ソースコード (Processing)
int i=0; int n=0;
//初期設定
void setup() {
background(255);
size(500, 500);
ellipseMode(CENTER);
strokeWeight(2);
stroke(0);
// 円を描く
ellipse(width/2, height/2, width, height);
strokeWeight(10);
}
//繰り返し実行
void draw() {
//一様乱数を得る
float x = random(0, width);
float y = random(0, height);
// 円の中心との距離を求める
float d = dist(x, y, width/2, height/2);
if (d < width/2) { //円の内側に入った場合
stroke(255, 0, 0, 150);
n++;
}
else { //円の外側の場合
stroke(150, 150);
}
// 点を打つ
point(x, y);
// 円周率の計算
float pai = ((float)n)/((float)i) * 4;
// 結果の表示
println("n="+n+" pi = "+pai);
i++;
if (i>1000) {
noLoop(); //停止
}
}