
🎲ビュフォンの針をp5.jsで再現できませんか?
ビュフォンの針問題は確率論の有名な問題で、長さの針を床に描かれた平行線の間に無作為に投げたときに、針が線を横切る確率を計算することにより、円周率(π)の近似値を求めることができます。
この問題をp5.jsで再現するには、以下のステップを実装する必要があります:
平行線を描画する: 床に描かれた平行線を描画します。これらの線は等間隔であり、間隔は針の長さと同じか、それ以上である必要があります。
針をランダムに投げる: 針をランダムに生成し、その位置(中心のx,y座標)と角度をランダムに設定します。
針が線を横切るか判定する: 針がどの平行線も横切っているかどうかを判定します。
πの近似値を計算する: 針が線を横切る確率を用いて、πの近似値を計算します。ビュフォンの針問題の理論によると、この確率は2L/(πT)で与えられます(Lは針の長さ、Tは線の間隔)。
これを実装するための基本的なp5.jsのコードスケッチを書いてみましょう。
以下のコードはp5.jsを使用してビュフォンの針問題をシミュレーションするためのものです。このシミュレーションでは、画面上に等間隔の平行線を描き、ランダムに針を投げて、それが線を横切るかどうかを判定します。シミュレーションを通じて、πの近似値を計算します。
// Buffon's Needle simulation parameters
let needleLength = 100;
let lineSpacing = 100;
let count = 0; // Count of needles crossing a line
let total = 0; // Total needles thrown
function setup() {
createCanvas(400, 400);
background(255);
drawLines();
}
function drawLines() {
for (let i = 0; i < width; i += lineSpacing) {
stroke(0);
line(i, 0, i, height);
}
}
function throwNeedle() {
// Needle center
let x = random(width);
let y = random(height);
// Needle angle
let angle = random(TWO_PI);
// Needle endpoints
let x1 = x + (needleLength / 2) * cos(angle);
let y1 = y + (needleLength / 2) * sin(angle);
let x2 = x - (needleLength / 2) * cos(angle);
let y2 = y - (needleLength / 2) * sin(angle);
// Check if needle crosses a line
let crossesLine = false;
for (let i = 0; i < width; i += lineSpacing) {
if ((x1 < i && x2 > i) || (x1 > i && x2 < i)) {
crossesLine = true;
break;
}
}
// Draw needle
if (crossesLine) {
stroke(255, 0, 0); // Red if crossing a line
count++;
} else {
stroke(0, 0, 255); // Blue if not
}
line(x1, y1, x2, y2);
// Update total needles thrown
total++;
}
function draw() {
if (total < 1000) { // Change this number for more or fewer needles
throwNeedle();
} else {
noLoop(); // Stop drawing once we reach the total
let probability = count / total;
let piEstimate = (2 * needleLength) / (probability * lineSpacing);
console.log('Pi Estimate:', piEstimate);
}
}
function mouseClicked() {
total = 0; // Reset total needles thrown
count = 0; // Reset count of needles crossing a line
clear();
background(255);
drawLines();
loop();
}

ビュフォンの針とは、確率論および統計学における有名な問題で、フランスの自然科学者ジョルジュ=ルイ・ルクレール・ド・ビュフォンにちなんで名付けられました。この問題は、数学的な確率を用いて円周率の近似値を求める方法の一つです。
ラップのスタイルで説明するなら、こんな感じになります:
Yo、聞いてくれ、このビュフォンの針の話、 数学のトリック、ちょっとした魔法みたいなもんだ、さぁ。
平面上に直線を引いて、間隔一定で、 針を落とすゲーム、始めようじゃないか。
針の長さ、直線の間隔、これがキー、 確率を使って、円周率を見つけ出すんだ。
針が線を越える確率、それを計算して、 2倍して針の長さを割り、直線の間隔で掛けるんだ。
何度も試せば試すほど、真実に近づく、 円周率π、3.14... それが見えてくる。
ビュフォンの針、ただの遊びじゃない、 数学の美しさ、自然の法則を見せてくれるんだ。
数学者の夢、科学者のロマン、 確率と統計で、宇宙の真理に一歩近づく。
いいなと思ったら応援しよう!
